在我的应用程序中,我正在编写一个文件来存储一些执行信息,一旦执行完毕,我想删除临时文件。问题是即使文件关闭或刷新流后我也无法删除文件。我试过了
Thread.sleep(1000);
file.delete();
并且也没有删除文件。然后我创建了一个while循环
while(!file.delete())
Thread.sleep(1000);
它永远是循环的。然后我添加了
System.gc();
file.delete();
它工作了!!!
我已经确认我已正常关闭或刷新文件。我想知道为什么我的代码适用于System.gc()
?
答案 0 :(得分:3)
这似乎表明您没有致电close()
。
原因:在java的开始时间,Object.finalize()
方法用于清理垃圾收集,而对于I / O,它执行了close()
。< / p>
在文件正在使用(未关闭)之前,无法在Windows上删除该文件。
答案 1 :(得分:0)
您要使用的是File.createTempFile(),并在生成的文件上调用deleteOnExit()
。它将在您执行结束时管理清理临时文件。您不应该手动执行此操作,让系统为您执行此操作,这就是它们将其包含在标准库中的原因。
此外,您应始终致电.close()
以确保将所有数据刷新到文件中,并且可以正确清理句柄。