2012-12-04 69 views
0
public static void print(String id) { 
    try{ 
     FileWriter fstream = new FileWriter("out.txt"); 
     BufferedWriter out = new BufferedWriter(fstream); 
     out.write(id +"\n"); 
     out.close(); 
    }catch (Exception e){ 
    } 
} 

我在運行時調用了這個方法幾十萬次,但它一直覆蓋第一行。我怎樣才能讓它從最底層開始? (我照顧下一行正在使用轉義序列定義。)如何讓BufferedWriter在文本文件的最底部定義的行上寫入?

或者是否有更優雅的解決方案?打開和關閉一個文本文件幾十萬次來存儲我的模擬結果並不是非常有效。但是如果我在所有執行結束時關閉了main.close,我就會與很多人說,與I/O有關的所有事情都應該放在try/catch塊中(另外,我會必須處理永不執行的功能和不被定義的功能等)。

回答

1

是的,你可以改變你的代碼使用new FileWriter("out.txt", true)。這將附加到該文件。不過,也有其他選擇:

  • 我倒是強烈使用OutputStreamWriter(一FileOutputStream纏)建議,而不是FileWriter。這樣你可以爲你的文件指定編碼。你想要什麼編碼? (您仍然可以採用這種方式 - 您只需使用合適的FileOutputStream構造函數。)

  • 爲什麼使用BufferedWriter?你正在給作者寫一個字符串,然後關閉作者。你期望緩衝有什麼效果?

  • 目前您正在吞嚥所有例外情況。即使你想要默默吞下IOException,你不應該吞嚥其他例外。在可以的地方總是要捕捉特定的例外

  • 如果拋出異常,你不是該文件。您應該始終使用finally塊關閉資源,或使用Java 7中的try-with-resources語句。

  • 您是否真的需要在每次寫入時重新打開該文件?爲什麼不把它打開,只要你需要就寫信給它?然後在應用程序關閉時關閉它。

+0

關於你提到的第二點:老實說,我只是用Google搜索一個代碼塊的文件出來,不知道是什麼替代的BufferedWriter有什麼他們之間的折衷方案。 –

+0

@WuschelbeutelKartoffelhuhn:只要直接使用'OutputStreamWriter',除非你需要緩衝。查看「BufferedWriter」的文檔,看看它的目的是什麼。 –

+0

好的,謝謝,我會用write()命中OutputStreamWriter對象, –

1

我不知道你在找什麼,但如果你正在尋找一種方式來追加到文件,你可以嘗試

FileWriter fstream = new FileWriter("out.txt", true); 

的構造

public FileWriter(File file, boolean append) 

將追加給予的文件,而不是覆蓋它。

相關問題