【发布时间】:2009-02-25 16:51:52
【问题描述】:
尽管在 finally 子句中关闭了流,但在使用 Java 时,我似乎经常遇到清理问题。 File.delete() 无法删除文件,Windows 资源管理器也失败。运行 System.gc() 有时会有所帮助,但终止 VM 会有所帮助,这不是一种选择。
有没有人有我可以尝试的其他想法?我在 Windows XP 上使用 Java 1.6。
更新:删除了 FLAC 代码示例,如果我将其隔离,代码就可以工作。
更新: 更多信息,这发生在 Apache Tomcat 中,Commons FileUpload 用于上传文件并且可能是罪魁祸首,我也使用 Runtime.exec() 在单独的进程中执行 LAME 来对文件进行编码,但这似乎不太可能导致这个因为 ProcessExplorer 清楚地表明 java.exe 在文件上有一个 RW 锁,并且 LAME 可以正常终止。
更新:我正在假设缺少 close() 或 close() 不会在我的代码或外部库中的某处被调用。我就是找不到!
【问题讨论】:
-
我们需要更多信息才能为您提供帮助。你是怎么打开文件的?您是否绝对肯定要关闭每个文件,并且文件是否有可能没有关闭?删除时,您是否检查布尔返回统计信息以了解它是否失败,以及在哪个文件上?
-
抱歉信息不足,现在添加代码示例。
-
现在您已经删除了示例代码,大多数答案都没有意义......
-
它们确实有道理。在我的代码或外部库中的某个地方缺少 close(),因为在运行垃圾回收之前问题仍然存在。然后运行 FileOutputStream 的 finalize() 并关闭文件并可以删除。
-
我怀疑是否存在 Java 中的错误。