2014-09-01 30 views
2

我有以下代碼:爲什麼PrintWriter.print(string)方法不會將文本流式傳輸到輸出文件中並在寫入文本之前等待關閉?

PrintWriter logput = new PrintWriter("path\\log.txt", "UTF-8"); 
for (String symb : symbolList) { 
System.out.println(symb); 
logput.println(symb); 
} 
logput.close(); 

for循環運行了幾個小時,所以我最終停止程序。當我檢查log.txt時,它是空的,而System.out每次迭代打印symb值沒有問題。這意味着println方法在有效地將文本寫入文件之前等待close方法調用。

這是很對我不好,有沒有寫文本文件與Java是沒有這個問題的任何其他方式?

編輯:flush()方法完成這項工作,感謝評論。另外還有誰能告訴我如何防止PrintWriter logput = new PrintWriter("path\\log.txt", "UTF-8");從log.txt中刪除預先存在的內容?

+0

符號表有什麼用途? – 2014-09-01 01:32:42

+0

這是一個字符串列表 – Wicelo 2014-09-01 01:33:38

+1

嘗試在寫入之後調用'logput.flush()'。 – 2014-09-01 01:34:23

回答

3

如何做,如果你使用OutputStream構造函數,而不是文件的構造我不會覆蓋以前的文件

,你可以使自己的FileOutputStream實例,它使用的是告訴OutputStream的追加,而不是構造覆蓋。 http://docs.oracle.com/javase/7/docs/api/java/io/FileOutputStream.html

如何自動刷新?

PrintWriter有一個構造函數需要一個額外的布爾設置自動沖洗

http://docs.oracle.com/javase/7/docs/api/java/io/PrintWriter.html#PrintWriter%28java.io.OutputStream,%20boolean%29

把這些結合在一起:

PrintWriter logput = new PrintWriter(new FileOutputStream("path\\log.txt", true), true); 
for (String symb : symbolList) { 
    System.out.println(symb); 
    logput.println(symb); 
} 
logput.close(); 

如果您需要使用UTF-8字符集,你必須做自己OutputStreamWriter

//boolean here is for append 
Writer writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("path\\log.txt", true), "UTF-8")) 
//boolean here is for autoflush 
PrintWriter logput = new PrintWriter(writer, true); 
for (String symb : symbolList) { 
    System.out.println(symb); 
    logput.println(symb); 
} 
logput.close(); 
1
FileOutputStream outputStream = new FileOutputStream("path\\log.txt", true); 
PrintWriter logput = new PrintWriter(outputStream, true); 
for (String symb : symbolList) { 
    System.out.println(symb); 
    logput.println(symb); 
} 
logput.close(); 

它會工作嗎?

相關問題