2012-03-20 32 views
4

是否有可能在java中打開一個文件追加數據並關閉無數次。例如:在Java中打開現有文件並關閉它。

//---- psuedocode 
     //class variable declaration 
     FileWriter writer1 = new FileWriter(filename); 

     fn1: 

     writer.append(data - title); 

     fn2: 
     while(incomingdata == true){ 
     writer.append(data) 
     writer.flush(); 
     writer.close() 
     } 

問題在於while循環。該文件已關閉,無法再次打開。任何人都可以幫助我呢?

+0

你可以重新打開每一次呢? – bdares 2012-03-20 07:19:49

+0

一旦關閉流,您就無法訪問它。 – 2012-03-20 07:19:52

+1

那麼*不要*關閉它?這裏有什麼問題? – EJP 2012-03-20 07:30:43

回答

2

建議每次關閉和重新打開文件的答案都是非常正確的。但是,如果你絕對必須這樣做(並且我不清楚你這麼做),那麼你可以每次創建一個新的FileWriter。當你構造一個FileWriter時,傳遞true作爲第二個參數,獲得一個附加到文件而不是替換它的文件。像

FileWriter writer1 = new FileWriter(filename, true); 
+0

因此,我可以假設文件每次都不會被新文件替換? – Siddharthan 2012-03-20 07:48:25

+0

這就是第二個參數給你的。如果您需要更多詳細信息,請檢查FileWriter的javadoc。 – 2012-03-20 07:52:58

0

我不建議嘗試關閉文件,然後重新打開它。打開文件是一項昂貴的操作,您執行此操作的次數越少,代碼運行速度越快。

打開一次,並在完成寫入後關閉文件。這將在你的循環之外。

1

一旦文件關閉,您將需要重新打開它。調用writer.flush()應該刷新流。所以基本上,您將從while循環中刪除writer.close()。這將允許您在完成文件後關閉文件。

所以你有兩個選擇,要麼從while循環中刪除writer.close(),要麼在循環開始時創建一個新的FileWriter實例。

1

一旦流被關閉,進一步的write()或flush()調用將導致IOException被拋出。然而,關閉先前關閉的流不起作用。

while(incomingdata == true){ 
     writer.write(data) 
} 
writer.close() 

您不需要每次刷新。因爲調用close()將首先在關閉流之前刷新數據。

更新了

,我創造了要保存的文件。對於哪個應該 關閉它,所以時間戳更新。那就是當文件同步 直播。

使用方法如下

while(incomingdata == true){ 
      writer.append(data); 
      writer.flush(); 
} 
writer.close(); 
+0

如果我再次遇到循環,該怎麼辦?是否有可能再次打開文件? Bcos我已經在循環結束時關閉它 – Siddharthan 2012-03-20 07:29:30

+0

它會拋出IOException。僅在將所有數據寫入流之後關閉流。 – 2012-03-20 07:33:41

相關問題