Java IO中的LineNumberReader类继承自BufferedReader,也就是说该类继承了BufferedReader的高级功能,每次可以读取一行数据。LineNumberReader类增加了获取和设置行号的功能。默认情况下,行编号从 0 开始。该行号随数据读取在每个行结束符处递增,并且可以通过调用 setLineNumber(int) 更改行号。但要注意的是,setLineNumber(int) 不会实际更改流中的当前位置;它只更改将由 getLineNumber() 返回的值。
可认为行在遇到以下符号之一时结束:换行符(' ')、回车符(' ')、回车后紧跟换行符。
实例:读取document目录下面的reader.txt文件,然后输出读取的每一行数据且在输出数据前加上行号。
package io.reader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.LineNumberReader;
public class LineNumberReaderTest {
public static void main(String[] args) {
LineNumberReader reader = null;
try {
reader = new LineNumberReader(
new InputStreamReader(
new FileInputStream("document/reader.txt")));
String line = "";
// 获取行号
int lineNumber = reader.getLineNumber();
while ( (line = reader.readLine()) != null ) {
// 输出读到的行号和字符行
System.out.println(lineNumber + ": " + line);
lineNumber = reader.getLineNumber();
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if ( null != reader ) {
try {
reader.close();
reader = null;
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}输出结果:
0: 静夜思 1: 床前明月光,疑是地上霜。 2: 举头望明月,低头思故乡。