Java写入已删除的文件

Java写入已删除的文件,java,filewriter,Java,Filewriter,我使用FileWriter写入文件,注意到即使在我删除了文件(进程外),FileWriter也不会抛出任何异常 这正常吗?这取决于您的操作系统: 在Windows上,通常无法删除打开的文件 在Unix上,删除打开的文件并继续写入(或读取)是完全可以接受的。一旦删除该文件,它将不再具有目录项。但是,在文件关闭之前,其内容将继续存在于磁盘上。一旦所有引用文件的打开句柄关闭,操作系统将自动回收磁盘空间 是的,这是正常的。使用大多数常规的I/O方式,如果文件不存在,它会为您创建它。当然,这需要在开始写

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


这正常吗?

这取决于您的操作系统:

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

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

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

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


    顺便说一句:如果你查看
    /proc/{pid}/fd/{fid}

    这是什么操作系统,你可以读/写一个打开文件的内容(删除或不删除)?例如,在Linux中,doing
    rm
    只会将文件与其路径解除关联,并且只有当文件的所有句柄都消失时,才会将其实际删除(如果文件仍然打开,则可以轻松恢复)。