2 回答

TA貢獻1821條經(jīng)驗 獲得超6個贊
在 Linux 上,此測試程序可靠地刪除當前目錄中的文件“test”。(對我來說。在我的機器上。Fedora Linux。Java 8。)
import java.io.File;
public class Test {
public static void main(String[] args) {
File file = new File("test");
file.deleteOnExit();
}
}
在 Linux 上,我能想到的唯一能阻止它工作的事情是:
如果當前用戶沒有刪除文件的權(quán)限,
如果當前目錄位于只讀文件系統(tǒng)上,或者
如果 JVM 崩潰,則阻止“退出時刪除”機制工作。
在 Windows 上,您還必須考慮“測試”文件已被另一個應(yīng)用程序打開/鎖定的可能性。(或者可能通過這個應(yīng)用程序,雖然不是在這種情況下。)
請注意,deleteOnExit
如果無法刪除文件,則不會拋出異常,File.delete()
. 但是,java.nio.file.Files.delete(Path)
如果由于某種原因刪除失敗,則會拋出一個很好的熱異常。這可能會給你一些關(guān)于實際發(fā)生的事情的線索。
如果這沒有幫助,您需要提供一個適當?shù)莫毩?MCVE,其他人可以在他們的 (Windows) 機器上試用。
根據(jù)您更新的代碼,問題似乎是MediaPlayer
該類打開了媒體文件。嘗試mp.dispose()
在應(yīng)用程序退出之前調(diào)用。

TA貢獻2021條經(jīng)驗 獲得超8個贊
File.deleteOnExit() 將通過 Runtime.addShutdownHook() 創(chuàng)建一個關(guān)閉鉤子。
使用 file.deleteOnExit() 沒有意義,然后使用 file.delete()... deleteOnExit 將在虛擬機終止時刪除文件。使用關(guān)閉鉤子時也可能出現(xiàn)問題:
1.如果JVM由于某些內(nèi)部錯誤而崩潰,那么它可能會崩潰而沒有機會執(zhí)行單個指令。
2.一旦啟動,Shutdown Hooks可以在完成前強行停止。如果進程在一段時間內(nèi)沒有終止(有限制),則 O/S 終止。
添加回答
舉報