正如Tim Bender所说,File.deleteOnExit()并不保证文件实际上会被删除.
但是,在Unixish系统(例如Linux或OSX)上,可以在写入之前删除临时文件(但在打开之后).只要你对文件保持一个开放的描述符,就可以继续读取和写入它,即使目录树中不再存在该文件,操作系统将自动回收文件使用的空间.程序退出(或关闭文件的最后一个描述符).
这不适用于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();
Run Code Online (Sandbox Code Playgroud)
请注意,File.deleteOnExit()在Windows上显然不是很可靠.因此,只要有可能,您应该尝试在完成后手动关闭和删除临时文件.有关详细信息,请参阅我写给另一个问题的答案.
| 归档时间: |
|
| 查看次数: |
3392 次 |
| 最近记录: |