问题 Java写入已删除的文件


我正在使用FileWriter写入文件,并注意到即使我删除了文件(进程外),FileWriter也不会抛出任何异常。

这是正常的吗?


12574
2018-02-06 18:07


起源

这是什么操作系统?例如,在Linux中 rm 只取消文件与其路径的关联,并且只有当文件的所有句柄都消失时才会被删除(如果它仍然打开,它实际上可以轻松恢复)。 - Mark Peters


答案:


这取决于您的操作系统:

  • 在Windows上,您通常无法删除打开的文件。
  • 在Unix上,删除一个打开的文件并继续写入(或从中读取)是完全可以接受的。删除文件后,它将不再具有目录条目。但是,在文件关闭之前,其内容将继续存在于磁盘上。一旦引用该文件的所有打开句柄都关闭,操作系统将自动回收磁盘空间。

15
2018-02-06 18:09





是的,这很正常。使用大多数传统的I / O方式,如果文件不存在,它会为您创建。这当然是等待你删除它 之前 你开始写它了。


1
2018-02-06 18:10





文件可以出现在多个位置(带有硬链接)删除文件会删除其中一个硬链接(可能是唯一的)如果其他地方有链接,则该文件仍可访问。

删除但打开的文件继续占用磁盘空间,如果足够大可能意味着您使用的空间,并且您可以在磁盘上找到的所有文件的大小不同。

顺便说一句:如果您查看,您可以读取/写入打开文件的内容(已删除或未删除) /proc/{pid}/fd/{fid}


0
2018-02-06 19:19