java LineNumberReader的使用

前段時間須要讀報表打印,需求是能夠從第N行讀到第N行,發現百度出來的LineNumberReader方法都不怎麼理想
而後就找到一篇和衆百度裏脫穎而出的好文章,因此分享之:
 
從類 的命名來看,貌似LineNumberReader能夠支持從任意行讀取的功能,而且提供了setLineNumber()的方法,可是這個按照並不能改變文件指針的位置,只是你調用getLineNumber()這個函數時,結果會變。API上面說它並不能改變文件物理的指針位置。看來之後得當心使用。
 

import java.io.File;java

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.LineNumberReader;
 
public class Ex7 {
     public void dataReader(String nameFile, int start, int finish) {
          if (start > finish) {
               System.out.println("Error start or finish!");
               return;
          }
          InputStream inputStream = null;
          LineNumberReader reader = null;
          try {
               inputStream = new FileInputStream(new File(nameFile));
               reader = new LineNumberReader(
                         new InputStreamReader(inputStream));
               int lines = getTotalLines(new File(nameFile));
               if (start < 0 || finish < 0 || finish > lines || start > lines) {
                    System.out.println("Line not found!");
                    return;
               }
              
               String line = reader.readLine();
             lines = 0;
             while (line != null) {
                 lines++;
                 if(lines >= start && lines <= finish){
                      System.out.println(line);
                 }
                 line = reader.readLine();
             }
             inputStream.close();
               reader.close();
          } catch (FileNotFoundException e) {
               e.printStackTrace();
          } catch (IOException e) {
               System.err.println("IO Error");
               System.exit(0);
          }
 
     }
    
     private int getTotalLines(File file) throws IOException{
          FileReader in = new FileReader(file);
        LineNumberReader reader = new LineNumberReader(in);
        String line = reader.readLine();
        int lines = 0;
        while (line != null) {
            lines++;
            line = reader.readLine();
        }
        reader.close();
        in.close();
        return lines;
     }
 
     public static void main(String[] args) {
          new Ex7().dataReader("data.txt", 2, 4);
          new Ex7().dataReader("data.txt",3,8);
     }
}
相關文章
相關標籤/搜索