LineNumberReader
是 Java 中一个用于读取文本行并记录行号的字符输入流类。它是 java.io
包的一部分,并且继承自 BufferedReader
。LineNumberReader
提供了一种方便的方法来读取输入流中的行,同时自动记录每一行的行号。
注:BufferedReader/
BufferedWriter 的缓冲机制使得读取操作更加高效,尤其是在处理大型文本文件时。
构造方法
LineNumberReader
提供了以下几种构造方法:
-
LineNumberReader(Reader in): 该构造方法接受一个
Reader
对象作为参数,并使用默认的缓冲区大小创建一个LineNumberReader
实例。
Reader reader = new FileReader("example.txt");
LineNumberReader lineNumberReader = new LineNumberReader(reader);
LineNumberReader(Reader in, int sz): 该构造方法接受一个 Reader
对象和一个整数作为参数,指定缓冲区的大小。
Reader reader = new FileReader("example.txt");
LineNumberReader lineNumberReader = new LineNumberReader(reader, 4096);
主要方法
LineNumberReader
继承了 BufferedReader
的所有方法,并且增加了一些自己独有的方法。
-
int getLineNumber(): 返回当前行号。行号从 0 开始计数,如果没有读取任何行,则返回 -1。
int lineNumber = lineNumberReader.getLineNumber();
void setLineNumber(int lineNumber): 设置当前行号。该方法不会更改实际的流内容,只是改变内部行号计数器的值。
lineNumberReader.setLineNumber(10);
String readLine(): 读取一行文本,并返回该行内容。如果已到达流的末尾,则返回 null
。
String line = lineNumberReader.readLine();
void mark(int readAheadLimit): 标记流中的当前位置。可以通过 reset()
方法返回到这个位置。readAheadLimit
参数表示在标记位置之前可以读取的字符数限制。
lineNumberReader.mark(100);
void reset(): 将流重置到最后标记的位置。必须在调用 mark()
之后调用。
lineNumberReader.reset();
void close(): 关闭 LineNumberReader
并释放与之关联的所有资源。
lineNumberReader.close();
示例代码
以下是一个使用 LineNumberReader
的简单示例,读取文件内容并打印每一行的行号和内容:
import java.io.*;
public class LineNumberReaderExample {
public static void main(String[] args) {
try {
FileReader fileReader = new FileReader("example.txt");
LineNumberReader lineNumberReader = new LineNumberReader(fileReader);
String line;
while ((line = lineNumberReader.readLine()) != null) {
System.out.println("Line " + lineNumberReader.getLineNumber() + ": " + line);
}
lineNumberReader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
在这个示例中,LineNumberReader
被用来读取 example.txt
文件的每一行,并打印行号和行内容。