Java文件删除和System.gc()

时间:2012-02-22 16:23:34

标签: java file file-io delete-file

在我的应用程序中,我正在编写一个文件来存储一些执行信息,一旦执行完毕,我想删除临时文件。问题是即使文件关闭或刷新流后我也无法删除文件。我试过了

Thread.sleep(1000);
file.delete();

并且也没有删除文件。然后我创建了一个while循环

while(!file.delete())
   Thread.sleep(1000);

它永远是循环的。然后我添加了

System.gc();
file.delete();

它工作了!!!

我已经确认我已正常关闭或刷新文件。我想知道为什么我的代码适用于System.gc()

2 个答案:

答案 0 :(得分:3)

这似乎表明您没有致电close()

原因:在java的开始时间,Object.finalize()方法用于清理垃圾收集,而对于I / O,它执行了close()。< / p>

在文件正在使用(未关闭)之前,无法在Windows上删除该文件。

答案 1 :(得分:0)

您要使用的是File.createTempFile(),并在生成的文件上调用deleteOnExit()。它将在您执行结束时管理清理临时文件。您不应该手动执行此操作,让系统为您执行此操作,这就是它们将其包含在标准库中的原因。

此外,您应始终致电.close()以确保将所有数据刷新到文件中,并且可以正确清理句柄。