Java无缘无故地锁定文件

Jon*_*ing 11 java locking file

尽管在最终条款中关闭了流,但我似乎经常在使用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()在我的代码或外部库中没有被调用.我只是找不到它!

Bog*_*dan 6

您发布的代码看起来很好 - 它不应该导致您描述的问题.我知道你只发布了一段代码 - 你能尝试将这部分提取到一个单独的程序,运行它,看看问题是否仍然存在?我的猜测是代码中有一些其他地方new FileInputStream(path);可以正常关闭流.当您尝试删除文件时,可能只是在这里看到结果.