Java file delete and System.gc()

本小妞迷上赌 提交于 2019-11-28 10:35:12

问题


In my app I'm writing a file to store some execution info and once the execution is done I want to delete the temp file. The issue is even after file close or flush by streams I cannot delete the file. I tried

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

and that didn't delete the file either. I then created a while loop

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

and it was looping forever. I then added

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

and it worked!!!

I have verified that I have gracefully closed or flushed the file. I want to know why my code worked with System.gc()?


回答1:


That seems to indicate that you did not call close().

Reason: in the begin time of java, the Object.finalize() method was used to clean up on garbage collection, and for I/O it did a close().

Until the file is in use (not closed), the file cannot be deleted on Windows.




回答2:


What you want to use is File.createTempFile() and call deleteOnExit() on the resulting file. It will manage cleaning up the temp file at the end of execution for you. You shouldn't be doing this manually, let the system do this for you, that is why they included this in the standard library.

Also you should always call .close() to make sure that all the data is flushed to the file and the handle can be cleaned up correctly.



来源:https://stackoverflow.com/questions/9398746/java-file-delete-and-system-gc

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!