2012-07-26 100 views
13

我的應用程序不斷地將大量字節寫入文件。如果我的代碼塊寫出字節,並且如果與驅動器或網絡的連接丟失,則會發生IOException,我怎麼知道它寫入了多少字節?在java中寫入文件時發生IOException處理

例如,我一次寫入2500個字節,如果發生IOException,這是否意味着它沒有寫入文件,或者它將部分字節寫入文件?如果部分字節寫入文件我怎樣知道僅供參考我使用

DataOutputStream 

寫出來的文件,有多少寫

。我只在我的應用程序關閉時才刷新。

+0

你用什麼方法寫入文件?我相當確定像BufferedOutputStream這樣的東西會給你一個與OutputStream不同的結果。 – xthexder 2012-07-26 14:09:37

+0

你也可以查看http://stackoverflow.com/questions/1742361/flush-in-java-io-filewriter,這也可以幫助你 – MaVRoSCy 2012-07-26 14:24:24

回答

6

您不能,IOException可以在任何時候發生。如果你仔細想一想,IOException可能是因爲軟件或硬件故障導致的,在第一個字節被寫入之前,所有的都被寫入了,但是連接發生了什麼 - 或者在數據塊相當大的情況下。

重新連接後,您必須檢查文件大小或使用其他一些技術來使文件保持一致狀態並恢復。最簡單的安全網:在寫入數據並可靠存儲之前讀取文件大小,寫入後寫入數據並讀取文件大小。如果錯誤發生且當前文件大小不等於預期的文件大小(上次保存),則截斷多餘的字節並重試。

閱讀有關關係數據庫中的事務日誌,瞭解軟件如何處理這種情況。

1

這取決於寫是如何失敗的,但InterruptedIOException可能是你在找什麼:

http://docs.oracle.com/javase/1.4.2/docs/api/java/io/InterruptedIOException.html

它包含的字段「bytesTransferred」: 「報告字節數過得怎麼樣在它被中斷之前作爲I/O操作的一部分進行傳輸。「

+0

這是我尋找的那種異常,我會試驗並報告回來如果嘗試抓住工程!謝謝 – Vig 2012-07-26 14:13:36

+0

它可能是。但是,這是爲每個IO操作,而不是整個傳輸,如果我沒有弄錯...... – 2012-07-26 14:13:45

+0

該異常僅適用於線程中斷,而不是如果有一個真正的I/O問題,如OP所問。 – EJP 2012-07-26 14:16:35

相關問題