如何管理临时文件的创建和删除

时间:2013-08-21 14:50:40

标签: java jsp temporary-files

我将代码添加到大型JSP Web应用程序中,集成了将CGM文件转换为PDF(或PDF到CGM)以显示给用户的功能。

看起来我可以创建转换后的文件并将它们存储在System.getProperty("java.io.tmpdir")指定的目录中。但是,我如何管理他们的删除?该程序驻留在基于Linux的服务器上。操作系统会自动从/tmp删除还是我需要自己提供功能?如果是后一种情况,那么有什么好办法呢?

编辑:我看到我可以使用deleteOnExit() (relevant answer elsewhere),但我认为JVM在后台或多或少连续运行,所以我不确定退出是否足够频繁。

我认为我不需要缓存任何已转换的文件 - 只需在每次需要时重新转换文件。

3 个答案:

答案 0 :(得分:1)

你可以这样做

File file = File.createTempFile("base_name", ".tmp", new File(temporaryFolderPath));
file.deleteOnExit();

虚拟机终止时将删除该文件

编辑:

如果要在作业完成后删除它,只需执行此操作:

File file = null;
try{
   file = File.createTempFile("webdav", ".tmp", new File(temporaryFolderPath));
   // do sth with the file
}finally{
   file.delete();
}

答案 1 :(得分:0)

当JVM使用deleteOnExit()退出时,有一些方法可以让JVM删除文件,但我认为使用该方法存在已知的内存泄漏。这是一篇解释泄漏的博客:http://www.pongasoft.com/blog/yan/java/2011/05/17/file-dot-deleteOnExit-is-evil/

更好的解决方案是使用cron删除旧文件,或者如果您知道不再使用该文件,为什么不在处理后删除它?

答案 2 :(得分:0)

来自你的评论:

  

另外,我可以创建一些东西来检查我的文件大小是否超过一定数量,然后删除最旧的那些,如果这是真的吗?或者我是否在思考它?

您可以创建一个类来跟踪具有大小限制的已创建文件。当创建新文件的大小超过限制后,它将删除最旧的文件。请注意,这可能会删除仍需要存在的文件,即使它是最旧的文件。您可能需要一种方法来了解仍需要保留哪些文件,并仅删除那些不再需要的文件。

您可以让班级中的计时器定期检查,而不是在每次创建后检查。此解决方案与您的应用程序绑定,而使用cron则不然。