2013-10-17 53 views
1

我試圖從一個ArrayList的元素寫入文本文件。我的BufferedWriter代碼如下(與實際文件路徑):BufferedWriter不寫整個文件 - 只有一部分

Path file = Paths.get("(filepath)"); 
    BufferedWriter writer = Files.newBufferedWriter(file, Charset.forName("US-ASCII")); 
    for (int j = 0; j < 100000; j++) { 
     writer.write(Integer.toString(radicalsAndPositions.get(j).get(0)) + "," + Integer.toString(radicalsAndPositions.get(j).get(1)) + " , " + "\n"); 
    } 

該ArrayList充滿達100,000元件,並生成一個文件,而是從端錯過值。當我將'j'限制爲10,000時,我只能得到生成的第一批9170行。在全部10萬條的情況下,我只獲得了99250條線。

將'j'限制爲1000會給我一個空文件。

該文檔生成正確,正確的元素,它只是過早地結束。爲什麼是這樣,我該如何解決它?

回答

3

關閉的BufferedWriter對象之後還寫writer.flush()

writer.close();

,除非您關閉了BufferedWriter的對象,不會寫你的文件。

+0

是否有原因如果沒有結束,它只會部分寫入? – Useablelobster

+1

BufferedWrite的概念是緩衝。當緩衝區滿時它會刷新並減少單獨的IO操作的數量。當你調用flush和關閉writer時,它也會刷新。 – Thomas

+1

是的,肯定是有原因的。它關閉您正在編寫文件的當前流。它需要被關閉,以反映你在一個文件中所做的改變。它也刷新流。 – Prasad

3

完成後請關閉緩衝的寫入器,以確保緩衝區被刷新。

2

寫入文件

writer.close() is also a good choice 
+2

調用'close()'應該足夠了,請參閱http://docs.oracle.com/javase/7/docs/api/java/io/BufferedWriter.html#close%28%29 – divadpoc