2011-04-25 157 views
0

我想删除某些文件后某个时间每天说一次。是使用deleteOnExit()为这个不错的选择吗?还有其他建议吗?替代方案deleteOnExit

我有一些Flash内容通过读取存储在Web服务器根目录中的一些xml文件来呈现其状态。这些xmls是在飞行中创建的。现在我想删除这些文件。如果我可以管理这个使用java

+0

1. DeleteOnExit仅在JVM出口运行 2.它可能导致巨大的内存问题,因为它将这些内存中的大量缓存存储在内存中。 3.你能详细说明这些存储的位置,它们被用于什么,它的多线程问题[CRON的问题]等。 – MJB 2011-04-25 18:37:28

回答

2

就我个人而言,我会编写一个脚本,通过您的目录来删除符合条件的文件(例如24小时)并通过cron作业运行它。我可能会在服务器负载最低时运行它。

3
java.io.File.createTempFile(prefix, suffix); 

让该操作系统的临时文件管理决定销毁文件的策略。

+2

这可以工作,除非你在Windows上运行的临时文件策略是“什么都不做”。 – 2011-04-25 18:37:36

+1

我已经降低了您的建议,因为在许多操作系统中没有临时文件管理。例如,在运行Tomcat的Windows上,这一切都转到Tomcat \ temp,甚至不是%TEMP%。在Linux上,是的,它通常会转到/ tmp子目录。 – MJB 2011-04-25 18:38:42

+0

Windows有临时文件管理,如果Tomcat选择不使用它,这并不意味着它不存在。如果你不知道windows有临时文件管理,请告诉,为什么你知道它是由%TEMP%变量控制的? – 2011-04-25 19:04:05

0

deleteOnExit()的问题是,如果您的应用程序崩溃,文件将永远保留。我会运行一个线程来定期清理临时目录(除了打开的文件)。

0

考虑使用Quartz来安排Java中的操作。您可以按定期计划扫描目录中超过24小时的文件,也可以为24小时后运行的每个文件创建一个新作业。

0

绝对避免File.deleteOnExit。我有一个issue,我在每个API调用中多次调用它。基本上,它将文件附加到文件列表以在退出时清理。 JVM从未退出,因为它在Web上下文中运行。所以,我有一堆文件的内存泄漏永远存在。设置一个cronjob或者在完成之后删除文件会更好。