You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

文件删除后FileInputStream仍能读取的原因是什么?

为什么删除文件后仍能通过已打开的FileInputStream读取内容?

这是类Unix文件系统(你用到的/tmp目录通常属于这类系统)的特性导致的:

  • 文件的目录条目(就是文件夹里显示的文件名)和实际数据存储是相互独立的。文件名本质是指向文件inode的一个链接,inode中记录了文件的元数据(权限、大小、数据块位置等)以及指向实际数据块的指针。
  • 当你调用file.delete()时,操作系统仅删除了这个目录条目,同时把inode的链接计数减1。但只要还有进程持有该文件的打开文件描述符(比如你代码里提前创建的FileInputStream就持有这个描述符),inode就不会被销毁,对应的磁盘数据块也不会被标记为可复用。
  • 因此你的FileInputStream依然能通过文件描述符找到对应的inode和数据块,正常读取文件内容,直到这个流被关闭、链接计数降到0,操作系统才会真正回收inode和数据块,释放磁盘空间。

对应你的代码流程:

  1. 先创建FileInputStream打开/tmp/input,此时进程获取了该文件的打开句柄;
  2. 调用delete()删除文件名,仅移除了目录里的条目,但文件的实际数据仍保存在磁盘上;
  3. 后续通过IOUtils.copyLarge读取流时,依然能访问到未被回收的数据,所以能成功复制内容到output文件。

内容的提问来源于stack exchange,提问作者Anshita Singh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 03:21:13