如何使用垃圾收集删除文件?

New*_*ian 6 java garbage-collection temporary-files

嗨我在java中使用了很多临时文件,我的问题是它们不会被删除.

无需实现我自己的临时文件管理处理(不是很难,我授予你,但我很懒,加上很多事情要做,如果我可以保存重新发明轮子,那就更好了)有没有办法确保临时文件在磁盘上将以相当规律的方式被删除.

1 - 使用File tmp = File.createTempFile(),确定我可以说tmp.deleteOnExit()但是如果事物在服务中运行它退出的唯一方式是它崩溃(很少发生),或者当系统崩溃时(比如当驱动器完全充满临时文件并翻倒集群时......哎呀!)

理想情况下,创建的实例在某些时候被垃圾收集器收集,并且由于应用程序中有很多空闲时间,如果GC可以完成它的清理并实际删除文件,那就太花哨了.从内存中取消引用实例时也可以使用磁盘.

我现在看到的唯一方法是重载File类并添加一个finalized方法......如果我这样做,那么可以选择我自己的临时文件管理器!

长话短说,我可以使用垃圾收集器来清理系统资源(即文件)吗?


谢谢大家的答案.我接受了Christoffer,因为它是最简单的实现,也是我最终做的事情.

我想,经过这么多年的清理让我忘记了基本的家务管理,虽然我在C++的好日子里做了很多努力.

Chr*_*fer 3

你当然可以。问题是你是否真的愿意:)

我实际上在野外遇到过这个问题;正如您所注意到的,在运行服务而不是应用程序时,使用 deleteOnExit() 清理临时文件是没有用的。我发现最稳定的解决方案是重构程序流程,以便在每个任务的基础上创建临时文件,并在不再需要时显式删除。

如果您以任何其他方式执行此操作,即如果程序无法在执行期间的任何时候确定是否应保留或丢弃临时文件,则可能会遇到设计问题。将文件包装在某些管理工具中只会推迟“真正的”解决方案;)