在使用FileOutputStream 寫入內容後嘗試刪除檔案時,file.delete() 方法傳回false ,儘管進行了驗證通過file.exists()、file.canRead()、file.canWrite() 和file.canExecute()文件存在和可存取。此行為可歸因於 Java 中的一個特殊錯誤。
正確利用 writeContent() 方法將內容寫入檔案並關閉串流。但是,在嘗試刪除檔案時,由於 Java 虛擬機器 (JVM) 對該檔案的引用持續存在,因此失敗。若要解決此問題,必須在嘗試刪除之前呼叫 System.gc()。這會強制 JVM 執行垃圾回收,釋放對檔案的參考並啟用其刪除。
新增了System.gc() 的修訂程式碼包括:
finally { try { in.close(); in = null; out.flush(); out.close(); out = null; System.gc(); } catch (IOException e) { logger.error(e.getMessage()); e.printStackTrace(); } }
透過呼叫System在finally區塊中的.gc(),刪除了對該檔案的引用,從而允許file.delete()成功刪除該檔案。
以上是儘管進行了檔案可訪問性檢查,為什麼 `file.delete()` 仍失敗?的詳細內容。更多資訊請關注PHP中文網其他相關文章!