前段時間須要讀報表打印,需求是能夠從第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);
}
}