我們的java程序不斷將一些重要的數據寫入文件。現在,我們希望拋出一些異常,或者在某些用戶手動刪除文件(Java程序正在寫入的文件)時在控制檯上顯示某種錯誤消息。Java - 如何在寫入文件時檢測文件刪除?
我發現java在嘗試寫入已被刪除的文件時不會引發任何異常。
方法一 -啓動一個新的線程,它將繼續檢查文件是否存在,並在文件被刪除時通知主java程序。這在我們的情況下不起作用,因爲我們將有幾個文件將被Java程序寫入,因此爲每個文件啓動一個新線程將不會提高內存效率。
方法II -每次在寫入文件之前檢查是否存在文件。這也不是一個好方法,因爲檢查文件的存在是一個代價高昂的操作。
方法III -擴展java.io.FilterWriter中(我們使用的是寫一個文件),並覆蓋的write()方法拋出異常時,它會嘗試寫到已經文件刪除。這似乎是一個很好的解決方案,但是我找不到Java正在消化某個異常(當它試圖寫入已刪除的文件時)的地方,我們可以通過重寫該方法來拋出該異常。
這是Windows還是Unix?您是在每次寫入後關閉文件,還是在整個運行期間將其保持打開狀態? – Gabe
@Gabe它是Unix。在Windows中,如果文件正被某個進程使用,則無法刪除該文件。 –
在Unix中,無法知道已打開的文件是否已被刪除,因此在這種情況發生時,Java(或任何其他語言)無法引發異常。 – Gabe