我的程序需要一个临时文件夹才能在运行时输入数据。退出程序后不需要此数据,应删除。程序的每个运行实例都需要一个文件夹。
如果我使用file.deleteOnExit()
,则无法确保文件在任何类型的崩溃时被删除。我的想法是检查启动时没有删除的旧临时文件并删除它们。但是当启动程序的另一个实例时,它不应该删除仍在运行的程序的临时文件。我怎样才能做到这一点?
更具体一点:临时文件应位于系统的临时目录中,如果程序正常退出,则应将其删除。这个问题只是程序崩溃的几次。该程序必须独立于操作系统。首选使用Path
而不是File
类的解决方案。
答案 0 :(得分:0)
好吧,我建议在每个应用程序的开始时创建一个私有目录,其中存储临时文件说/var/run/myapp/tmp
。
开始时删除目录内容:
void purgeDirectory(File dir) {
for (File file: dir.listFiles()) {
if (file.isDirectory()) purgeDirectory(file);
file.delete();
}
}
您可以在应用程序退出时自由删除目录内容,但这样,即使在退出清理时未正确完成,您也确保在启动时有一个空目录。
答案 1 :(得分:0)
如果您需要依赖其他公共资源(如临时文件),通常让您的应用程序拥有多个实例是个坏主意。例如,如果您已经有两个应用程序实例,那么刚打开的第三个实例将很难判断它是否是第三个以及其他实例是否还活着。
正如您所说,如果JVM崩溃并且Java没有提供自动清理临时文件的可靠方法,deleteOnExit()将不会清除临时文件。
所以我有以下建议: