我将代码添加到大型JSP Web应用程序中,集成了将CGM文件转换为PDF(或PDF到CGM)以显示给用户的功能。
看起来我可以创建转换后的文件并将它们存储在System.getProperty("java.io.tmpdir")
指定的目录中。但是,我如何管理他们的删除?该程序驻留在基于Linux的服务器上。操作系统会自动从/tmp
删除还是我需要自己提供功能?如果是后一种情况,那么有什么好办法呢?
编辑:我看到我可以使用deleteOnExit()
(relevant answer elsewhere),但我认为JVM在后台或多或少连续运行,所以我不确定退出是否足够频繁。
我认为我不需要缓存任何已转换的文件 - 只需在每次需要时重新转换文件。
答案 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则不然。