即使 JVM 提前终止,File.deleteOnExit() 是否也能保证文件被删除?
正如蒂姆·本德所说,File.deleteOnExit()
不保证文件确实被删除。
但是,在 Unixish 系统(例如 Linux 或 OSX)上,可以删除临时文件before写入它(但在打开它之后)。只要您为文件保留一个打开的描述符,即使该文件不再存在于目录树中,您也可以继续读取和写入它,并且操作系统将在您删除文件时自动回收该文件所使用的空间。程序退出(或关闭文件的最后一个描述符)。
这在 Windows 上不起作用,它具有不同的文件系统语义,并且不允许删除打开的文件。但是,在可移植代码中,您可以简单地尝试在打开文件后删除该文件,如果不成功,则可以依靠deleteOnExit()
:
File tempFile = File.createTempFile("tempfile", ".tmp");
RandomAccessFile fh = new RandomAccessFile (tempFile, "rw");
// try to delete the file now, fall back to deletion on exit
if ( !tempFile.delete() ) tempFile.deleteOnExit();
请注意,显然,File.deleteOnExit()
在 Windows 上不太可靠。因此,只要有可能,您仍然应该在使用完临时文件后尝试手动关闭并删除它们。有关更多详细信息,请参阅这个答案是我写给另一个问题的 https://stackoverflow.com/questions/16691437/when-are-java-temporary-files-deleted/16694493#16694493.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)