嗨我使用了大量的临时文件中爪哇和我的问题是,他们没有得到删除。

不具有实现我自己处理的临时文件管理(不难我授予你,但我懒的再加上与这么多的事情要做,如果我可以保存重新发明轮子,对这所有的好)是否有办法确保临时磁盘上的文件将得到删除在一个相当规则时尚。

1使用的文件tmp=文件。createTempFile(),确定我可以说tmp。deleteOnExit()但是,如果事情运行中的服务只有这样,它退出时,它要么崩溃(很少发生),或当该系统的崩溃(如当驱动是完全充分的临时文件和倒塌的集群...哎呀!)

理想的是,情况创造了收集在某一点上由于垃圾回收,因为有很多的空闲时间在应用程序,它只会是花花公子如果GC可以,好了,完成它的清理和实际上删除的文件的磁盘上,以及在取消引用的实例从存储器。

只有这样我看看现在是超负荷的文件类和加最后确定方法...如果我做的还不如去我自己的临时文件经理!

所以长话短说,我可以使用的垃圾清理系统的资源(即文件)以及吗?


谢谢你的答案。我接受Christoffer的,因为它是最简单的实施是什么,我结束了这样做的。

我猜正在清理之后这么多年来让我忘记基本的客房服务我是虽然做到的困难的方式在良好的'ol天C++。

有帮助吗?

解决方案

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

其实我已经在野外遇到这个问题;运行的服务,而不是应用程序时,你注意到了,清理临时文件与deleteOnExit()是没用的。我发现,最稳定的解决方案是重组这样的临时文件是在每个任务的基础上创建的,并明确当不再需要删除的程序流程。

如果你做任何其他方式,即,如果该程序是无法断定的临时文件是否应保持或在执行过程中的任何点丢弃,你可能有一个设计问题。在一些经理线束包裹的文件也只是推迟了“真实”的解决方案;)

其他提示

您可能想看看幻影

  

幻影参考对象,其集电极之后排队确定其指示可以以其它方式回收。虚引用最常用于以更灵活的方式调度验预清理操作可能比Java终结机制

依赖于一个事件,当您的类的摧毁不是万无一失的,并且可以离开文件的后面。

我认为,最简单和最可靠的方式实现的清除你的临时文件如下:

  • 写一个事件处理程序,当您的程序关闭清理的任何文件已经打开过您的电流会议。
  • 写一个过程,将运行在程序开始,删除任何临时文件,在该文件夹,其中超过24小时。

用这种方法,你不需要担心如果你的程序的崩溃,因为某些原因和叶临时文件后面,你也不需要担心的程序删除的文件,这些文件仍在使用。

垃圾收集是错误的名字空间的用于这种类型的信息处理。

以下一点应该可以足够处理的临时文件。

  1. 你应该试图删除文件的直接后你不要使用的文件了。一个最后确定块可以处理这个问题。

  2. DeleteOnExit你应该使用。

  3. 你可以创建临时文件,在一个特殊的临时目录。这个临时目录可以删除,当应用程序启动并关闭,可以肯定的是,没有临时文件是现有应用程序后被关闭。

垃圾收集器是没有用于这样的事情。它被设计用于存储器管理,可以有许多缺点。

  • 你的对象可以是收集了长时间的文件后不再使用。
  • 你的对象不能保证被收集。

这两件事情发生,尤其是经常,如果是开始了一大堆大小的事情上服务器的端是不寻常的。

在某些点上你的节目你必须接近的溪流对该文件(否则你会吃系统文件处理,这使得该系统无法使用的,我没有,已经).在该点关闭流你也可以删除的相关文件。这是最清洁的方式。

好了,你都可以成为它使用的终结是垃圾收集的对象何时删除文件。

但终结不会被调用任何可预见的方式,所以我真的不推荐的。

垃圾回收器是不是做这种资源腾出地方。请参阅这两篇文章下面就如何在Java中释放资源 http://c2.com/cgi/wiki?ReleasingResourcesInJava 并且还与Java终结的性能问题。他们可能会给予一定的洞察力和理解它应该如何使用。 http://www.enyo.de/fw/notes/java- GC-finalizers.html

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top