1

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

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

编辑:我看到我可以使用deleteOnExit() (其他地方的相关答案),但我认为 JVM 在后台或多或少地连续运行,所以我不确定退出是否足够频繁。

我认为我不需要缓存任何转换后的文件——只需在每次需要时重新转换文件即可。

4

3 回答 3

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();
}
于 2013-08-21T14:53:29.597 回答
0

根据您的评论:

另外,我是否可以创建一些东西来检查我的文件大小是否超过一定数量,然后如果是这样就删除最旧的文件?还是我想多了?

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

您可以在课堂上设置一个计时器来定期检查,而不是在每次创建之后进行检查。此解决方案与您的应用程序相关联,而使用 cron 则不是。

于 2013-08-21T15:27:46.333 回答
0

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

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

于 2013-08-21T14:54:15.023 回答