1
我用FileOutputStream fos
創建/追加和寫入到一個單獨的線程調試文件:當文件被刪除時,FileOutputStream寫入不會引發異常?
fos = new FileOutputStream(outputFile, true);
if (!outputFile.exists()) {
outputFile.createNewFile();
}
fos.write(string.getBytes());
此代碼不斷beeing稱爲一個循環,而用戶可能被清除=從另一個線程隨時刪除該文件啓動重新記錄調試輸出。
現在我真的很驚訝,當文件beeing刪除此代碼運行通過沒有引發任何異常,但沒有任何反應。即該文件不再被重新創建,也沒有任何東西被寫入。所有的「寫」都丟失了。
在每次調用fos.write
之前,我是否真的必須一直手動檢查文件是否已被刪除?
如果異常會像預期的那樣工作,即寫入已刪除的文件時,它會更簡單和更清晰。
謝謝你的明確答案 - 但我不確定我是否真的同意「而事實上,它導致更容易和更乾淨的行爲,而不是文件被刪除時爆炸會。」有一個乾淨的例外來處理這種情況並不真正「爆炸」。儘管如此 - 非常感謝您的明確表達 - 所以我必須在每次寫入文件之前檢查文件是否存在。那我有沒有正確理解你? – user387184 2012-04-23 22:35:15
@ user387184有時嘗試Windows開發...並且您會喜歡* IX文件系統語義;-)無論如何,在寫入之前不要檢查。只有在開放(這是「內置」取決於模式)。如果有人取消鏈接文件(「刪除它」),希望他們有一個理由......更好的方式來「清除」文件可能是截斷它。 – 2012-04-23 22:37:54
在這種情況下,我必須在每次寫入之前檢查文件是否仍然存在,因爲它是一個帶有許多輸出的調試循環,並且用戶可以在任何階段重新開始,忘記所有以前的調試輸出行 - 無論如何,它非常快速,根本沒有問題。再次感謝讓這個水晶般清晰!這就是我喜歡的原因! – user387184 2012-04-23 23:00:57