2 回答
TA贡献1821条经验 获得超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 上,我能想到的唯一能阻止它工作的事情是:
如果当前用户没有删除文件的权限,
如果当前目录位于只读文件系统上,或者
如果 JVM 崩溃,则阻止“退出时删除”机制工作。
在 Windows 上,您还必须考虑“测试”文件已被另一个应用程序打开/锁定的可能性。(或者可能通过这个应用程序,虽然不是在这种情况下。)
请注意,deleteOnExit
如果无法删除文件,则不会抛出异常,File.delete()
. 但是,java.nio.file.Files.delete(Path)
如果由于某种原因删除失败,则会抛出一个很好的热异常。这可能会给你一些关于实际发生的事情的线索。
如果这没有帮助,您需要提供一个适当的独立 MCVE,其他人可以在他们的 (Windows) 机器上试用。
根据您更新的代码,问题似乎是MediaPlayer
该类打开了媒体文件。尝试mp.dispose()
在应用程序退出之前调用。
TA贡献2021条经验 获得超8个赞
File.deleteOnExit() 将通过 Runtime.addShutdownHook() 创建一个关闭钩子。
使用 file.deleteOnExit() 没有意义,然后使用 file.delete()... deleteOnExit 将在虚拟机终止时删除文件。使用关闭钩子时也可能出现问题:
1.如果JVM由于某些内部错误而崩溃,那么它可能会崩溃而没有机会执行单个指令。
2.一旦启动,Shutdown Hooks可以在完成前强行停止。如果进程在一段时间内没有终止(有限制),则 O/S 终止。
添加回答
举报