[英]Delete temp files on startup
我的程序需要一个临时文件夹来在运行时输入数据。 退出程序后不需要此数据,应删除。 每个运行的程序实例都需要一个文件夹。
如果我使用file.deleteOnExit()
,这不会确保文件在任何类型的崩溃时被删除。 我的想法是检查启动时没有删除的旧临时文件并删除它们。 但是当启动程序的另一个实例时,它不应该删除仍在运行的程序的临时文件。 我怎样才能做到这一点?
更具体一点:临时文件应位于系统的临时目录中,如果程序正常退出,则应将其删除。 这个问题只是程序崩溃的几次。 该程序必须独立于操作系统。 首选使用Path
而不是File
类的解决方案。
好吧,我建议在每个应用程序的启动时创建一个私有目录,其中存储临时文件说/var/run/myapp/tmp
。
并在开始时删除目录内容:
void purgeDirectory(File dir) {
for (File file: dir.listFiles()) {
if (file.isDirectory()) purgeDirectory(file);
file.delete();
}
}
你仍然可以在应用程序退出时自由删除目录内容,但这样,即使在退出清理时没有正确完成,你肯定在启动时有一个空目录。
如果您需要依赖其他公共资源(如临时文件),通常让您的应用程序拥有多个实例是个坏主意。 例如,如果您已经有两个应用程序实例,那么刚打开的第三个应用程序很难判断它是否是第三个以及其他实例是否仍处于活动状态。
正如您所说,如果JVM崩溃并且Java没有提供自动清理临时文件的可靠方法, deleteOnExit()将不会清除临时文件。
所以我有以下建议:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.