2012-09-21 116 views
-1

我正在使用BufferedWriter將一些數據寫入文本文件。它比使用ODBC寫入Access更快。代碼看起來是這樣的:Java寫入文本文件未完成

BufferedWriter bw = new BufferedWriter(new FileWriter(new File(filePath), true)); 

真正是使的BufferedWriter追加,不覆蓋。

bw.append(   
    country + "\t" + 
    scenario + "\t" + 
    tempStage + "\t" + 
    year + "\t" + 
    tempState 
); 

它在以前的項目中對我有效。新問題:它只是在線路中間發展起來。這是一個很好的線:

SultanateOfBrunei BeeBeeScenario Other 2019 

最後一行通常是這樣的:

SultanateOfBrunei BeeBeeScenario Other 2019 Nondyna 

或 Sulta

甚至 蘇

我把錯誤處理代碼忽略這樣的奇怪的不完整線條。

這意味着並非所有的數據都被寫入。我可以放棄一個數據,沒有問題...但它似乎正在削減更多。模擬運行1990年至2020年底,並且通常在2019年的某個時候出現。虛擬機的增加會有所幫助 - 它會進一步發展。但我只有一定的內存!

任何見解?

謝謝!

+0

嘿,我想看到所有的代碼。 EVERTHING – Coffee

+0

對不起......我想我的老闆們會殺了我,如果我再給予...有沒有你正在尋找的特定片段? – user1507455

+0

*「我想我的老闆們會殺了我,如果我再給他們的話」* - 你問過他們嗎? –

回答

5

您的應用程序可能沒有關閉BufferedWriter,因此輸出的最後一部分沒有寫出到文件中。

你的程序的結構應該是這樣的:

BufferedWriter bw = new BufferedWriter(new FileWriter(new File(filePath), true)); 
try { 
    // generate output 
} finally { 
    bw.close(); 
} 

注意,這並不試圖處理可能出現在打開的是,寫入或關閉作家I/O異常。無論你是否應該這樣做,你應該如何處理你遇到的任何異常取決於具體情況。

+0

這工作!我完全忘了關閉它。謝謝。 – user1507455

1

在關閉它之前,您可能不會沖洗(bw.flush())流。這應該對所有流進行,但對緩衝區更重要。

+2

我敢打賭作家也沒有被關閉。關閉隱式刷新。 –

1

你只需要關閉BufferedWriter。如果你不用,最後填充的緩衝區可能不會被寫入。

1

一旦你寫完了,你應該在你的BufferedWriter對象上調用close()。這可以確保您的流被刷新並因此關閉。