Java中实现读取文件指定行
读取文件指定行要用到类LineNumberReader,它是跟踪行号的缓冲字符输入流,其基类是BufferedReader。。它有两个构造方法:
public LineNumberReader(Reader in)
使用默认输入缓冲区的大小创建新的行编号 reader,默认输入缓冲区的大小为8096个字节。
pulbic LineNumberReader(Reader in,int size)
创建新的行编号 reader,将字符读入给定大小的缓冲区。
例如:
FileInputReader in=new FileInputReader(“test.java”);
LineNumberReader line=new LineNumberReader(in);
源代码如下:
- import java.io.File;
- import java.io.FileReader;
- import java.io.IOException;
- import java.io.LineNumberReader;
- public class ReadSelectedLine{
- /**
- * 读取文件指定行。
- */
- public static void main(String[] args) throws IOException {
- // 指定读取的行号
- int lineNumber = 12;
- // 读取文件
- File sourceFile = new
- File("src/Chapter08/ReadSelectedLine.java");
- // 读取指定的行
- readAppointedLineNumber(sourceFile, lineNumber);
- // 获取文件的内容的总行数
- System.out.println(getTotalLines(sourceFile));
- }
- // 读取文件指定行。
- static void readAppointedLineNumber(File sourceFile, int lineNumber)
- throws IOException {
- FileReader in = new FileReader(sourceFile);
- LineNumberReader reader = new LineNumberReader(in);
- String s = reader.readLine();
- if (lineNumber < 0 || lineNumber > getTotalLines(sourceFile)) {
- System.out.println("不在文件的行数范围之内。");
- }
- {
- while (s != null) {
- System.out.println("当前行号为:"
- + reader.getLineNumber());
- reader.setLineNumber(20);
- System.out.println("更改后行号为:"
- + reader.getLineNumber());
- System.out.println(s);
- System.exit(0);
- s = reader.readLine();
- }
- }
- reader.close();
- in.close();
- }
- // 文件内容的总行数。
- static int getTotalLines(File file) throws IOException {
- FileReader in = new FileReader(file);
- LineNumberReader reader = new LineNumberReader(in);
- String s = reader.readLine();
- int lines = 0;
- while (s != null) {
- lines++;
- s = reader.readLine();
- }
- reader.close();
- in.close();
- return lines;
- }
- }