Java IO:LineNumberReader

时间:2020-01-09 10:36:04  来源:igfitidea点击:

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实例也会关闭。