java - 如何使用垃圾回收来删除文件?

标签 java temporary-files garbage-collection

您好,我在 Java 中使用了很多临时文件,但我的问题是它们没有被删除。

无需实现我自己的临时文件管理处理(我承认你并不难,但我很懒,还有很多事情要做磁盘上的临时文件将以相当规律的方式被删除。

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

理想情况下,创建的实例会在某个时刻被垃圾收集器收集,并且由于应用程序中有很多空闲时间,所以如果 GC 能够完成它的清理并实际删除,那就太棒了从内存中取消引用实例时磁盘上的文件也是如此。

我现在看到的唯一方法是重载 File 类并添加一个最终确定的方法...如果我这样做,还不如使用我自己的临时文件管理器!

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


谢谢大家的回答。我接受了 Christoffer 的,因为它最容易实现,也是我最终做的。

我想在这么多年之后被清理让我忘记了我在 C++ 的好日子里艰难地做的基本内务处理。

最佳答案

当然可以。问题是你是否真的想要:)

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

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

关于java - 如何使用垃圾回收来删除文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1057037/

相关文章:

java - 使用 eclipse 运行 appengine

java - 明显的括号不好吗?

shell - 手动实现 mkstemp

c# - 用于对具有任意属性的网络设备进行建模以供学习的最佳 API?

java - 使用外部 jar 运行 bat 文件时出现 NoclassDefFoundError 异常

java - 在不知道图像路径的情况下将图像添加到 JTooltip(由于图像是临时资源)

java - 有多少对象符合垃圾收集条件?

c# - 如何在其方法中获取结构的地址?

java - Java 中的死存储到局部变量