【问题标题】:Java writing to a deleted fileJava 写入已删除的文件
【发布时间】:2012-02-28 05:05:25
【问题描述】:

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

这正常吗?

【问题讨论】:

  • 这是什么操作系统?例如,在 Linux 中,rm 只会解除文件与其路径的关联,只有当文件的所有句柄都消失时,它才会真正被删除(如果它仍然处于打开状态,它实际上可以很容易地恢复)。

标签: java filewriter


【解决方案1】:

这取决于您的操作系统:

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-09-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-03-02
        相关资源
        最近更新 更多