开发人员常常会随手写一些类来读入一个简单的配置文件或者用BufferedReader一行一行地读入特定格式的数据这些随手写成的解析器往往会提供基本的出错报告但有时候它们会很难记录下出错的行号幸运的是Java的javaioLineNumberReader类提供了行号的记录而不需做任何额外的工作 javaioLineNumberReader类是javaioBufferedReader类的扩展它封装了处理行号的额外能力假设我们有一个简单的解析器它的规则是每一行都必须以#开头我们来示范一下LineNumberReader的用法 public void parseFile(Reader reader) throws IOException { LineNumberReader in = new LineNumberReader(reader); String line = ; while( (line = inreadLine( )) != null ) { if(linestartsWith(#)) { // 处理这一行 } else { throw new IOException(第 + ingetLineNumber( ) + 行丢了#号); } } inflush( ); inclose( ); } 行号的意味着我们还没开始读入如果在一个程序中我们每次读入一行并输出该行和它的行号行号将从开始 LineNumberReader中有一个setLineNumber(int)方法但它仅仅是个装饰物例如把行号设成并不会转到第行它只是简单地把当前行的行号设成下一行的行号就是了 |