【发布时间】:2009-06-29 07:44:49
【问题描述】:
您好,我在 java 中使用了很多临时文件,我的问题是它们没有被删除。
无需实现我自己的临时文件管理处理(我承认并不难,但我很懒,还有很多事情要做,如果我可以避免为此重新发明轮子就更好了)有没有办法确保磁盘上的临时文件将以相当常规的方式被删除。
1 - 使用 File tmp = File.createTempFile(),当然我可以说 tmp.deleteOnExit() 但如果事情在服务中运行,它退出的唯一方式是当它崩溃(很少发生),或者当系统崩溃(例如当驱动器完全充满临时文件并推翻集群时......哎呀!)
理想情况下,创建的实例会在某个时候被垃圾收集器收集起来,并且由于应用程序中有很多空闲时间,如果 GC 能够完成它的清理并实际删除,那就太棒了当从内存中取消引用实例时,磁盘上的文件也是如此。
我现在看到的唯一方法是重载 File 类并添加一个 finalized 方法...如果我这样做,还不如使用我自己的临时文件管理器!
长话短说,我也可以使用垃圾收集器来清理系统资源(即文件)吗?
谢谢大家的回答。我接受了 Christoffer 的方法,因为它是最容易实现的,也是我最终要做的。
我想在这么多年之后被清理干净让我忘记了基本的家务,我认为在 C++ 的好日子里,我是艰难的。
【问题讨论】:
-
我认为您混淆了您的条款。垃圾收集器用于内存,而不是文件。
-
更不用说,如果您希望它在应用程序退出时运行,您将不得不在其中手动放置一些东西,因为垃圾收集不会在退出/崩溃时运行(内存由那时的操作系统,而不是框架)
-
而且 Java 没有析构函数,因此您无法将删除与收集的对象相关联。
-
我知道垃圾收集器是做什么的,我想知道我是否可以以某种方式扩展它的影响区域并删除磁盘上的实际文件以及内存实例,它毕竟是一个临时文件...
-
@lhahne:臭名昭著的“finalize()”不是几乎等同于 Java 中的析构函数吗?
标签: java temporary-files garbage-collection