Java IO:LineNumberReader
Java" LineNumberReader"类(" java.io.LineNumberReader"是一个" BufferedReader",用于跟踪已读取字符的行号。行号从0开始。每当" LineNumberReader"在由返回的字符中遇到行终止符时,包装的"阅读器",行号递增。
我们可以通过调用getLineNumber()方法从LineNumberReader获取当前行号。我们还可以通过调用setLineNumber()方法来设置当前行号。
LineNumberReader示例
这是一个简单的Java" LineNumberReader"示例:
LineNumberReader lineNumberReader = new LineNumberReader(new FileReader("c:\data\input.txt")); int data = lineNumberReader.read(); while(data != -1){ char dataChar = (char) data; data = lineNumberReader.read(); int lineNumber = lineNumberReader.getLineNumber(); } lineNumberReader.close();
这个例子首先创建一个" LineNumberReader",然后说明如何从中读取所有字符,还说明如何获得行号(实际上,对于每个读取的字符,它可能比我们需要的多一些)。
解析中的行号
如果我们正在分析可能包含错误的文本文件,则行号可能会很方便。向用户报告错误时,如果错误消息中包含遇到错误的行号,则更容易纠正错误。
关闭LineNumberReader
从LineNumberReader中读取完字符后,我们应该记住将其关闭。关闭LineNumberReader也会关闭从LineNumberReader读取的Reader实例。
关闭LineLineReader是通过调用其close()方法来完成的。这是关闭LineNumberReader
的样子:
lineNumberReader.close();
我们还可以使用Java 7中引入的try-with-resources构造。这是如何使用try-with-resources构造使用和关闭LineLineReader外观的方法:
Reader reader = new FileReader("data/text.txt"); try(LineNumberReader lineNumberReader = new LineNumberReader(reader)){ String line = lineNumberReader.readLine(); while(line != null) { //do something with line line = lineNumberReader.readLine(); } }
请注意,不再有任何显式的close()
方法调用。 try-with-resources构造可以解决这一问题。
还要注意,第一个FileReader
实例不是在try-with-resources块内创建的。这意味着try-with-resources块不会自动关闭此FileReader实例。但是,当LineLineReader关闭时,它也会关闭从中读取的Reader实例,因此,当LineNumberReader关闭时,FileReader实例也会关闭。