2009-06-16 60 views
5

我使用BufferedReader和PrintWriter遍歷輸入文件的每一行,對某些行進行更改並輸出結果。如果一行不經過更改,它只是按原樣輸出到輸出文件。但是由於某種原因,這個過程過早地結束了。該代碼看起來是這樣的:對我的輸入文件的末尾BufferedReader/PrintWriter的問題?

BufferedReader in = new BufferedReader(new FileReader("in.txt")); 
FileOutputStream out = new FileOutputStream("out.txt"); 
PrintWriter p = new PrintWriter(out); 
String line = in.readLine(); 

while(line!=null) 
{ 
    if(line is special) 
     do edits and p.println(edited_line); 
    else 
     p.println(line); 

    line = in.readLine(); 
} 

但是,對於一些奇怪的原因,這個過程過早結束(實際打印出一條線的一半)。這有什麼明顯的原因? while循環顯然是由null結束的。這是我的250k +行txt文件的結尾。謝謝!

+0

你真的確認沒有異常被拋出?如果拋出異常*,你會怎麼做?會記錄嗎? – 2009-06-16 15:03:13

+0

喬恩 - 別忘了PrintWriter壓扁異常 - 您必須使用「checkError」方法來查看是否發生了異常。 – MetroidFan2002 2009-06-16 15:04:25

回答

7

你在哪裏刷新/關閉PrintWriter或FileOutputStream?如果程序退出並且沒有完成,則不會寫出所有結果。

你需要out.close()(可能是p.flush()呢?)在你的進程結束時關閉文件輸出流

1

嘗試在循環後添加p.flush()。

1

PrintWriter沒有啓用自動填充功能,因此在程序終止之前文件的最後一位可能不會被刷新。

在你的while循環之後添加一個 p.flush()應該可以做到。