java - 文件在 Linux 上被删除但在 Windows 上没有

标签 java linux

所以我有这个 Java 程序,我在其中创建一个文件,写入并保存它。 但是在程序完成它的工作后,我希望它删除它创建的文件。

这是我创建和删除文件的代码:

RandomAccessFile file = null;
file = new RandomAccessFile("myFile.zip", "rw");
file.write(buffer,0,read);
file.close();
File file = new File("myFile.zip");
file.delete();

它与 Windows 和 Linux 如何使用它们的文件路径(\或/)无关,因为除了显示它位于我项目的根目录之外,我并没有真正指定它。

那么在这种情况下可能是什么情况呢?

最佳答案

Windows 注意到打开的文件句柄并拒绝删除打开的文件。这是 Windows 中的策略。打开的文件不会消失。持有打开文件句柄的进程可以相信文件会保留。

Linux 有不同的策略。一个文件可以从所有目录中删除(是的,当它被硬链接(hard link)时它可以在多个目录中),即使一个进程仍然有一个打开的句柄。文件本身不会从磁盘中删除。使用打开句柄的进程仍然可以处理文件,使其增长、收缩、写入、读取。但在句柄关闭后,文件会被文件系统自动删除。

您使用的操作系统的这些不同政策是您观察的原因。

关于java - 文件在 Linux 上被删除但在 Windows 上没有,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23679970/

相关文章:

linux - 当您没有权限时在 Mac 或 Linux 上编辑 sudoers 文件

linux - 用于删除所有子目录中文件的 Bash 脚本。

linux - 在脚本中调用 shell 脚本

java - 在java中创建输入对象时找不到符号错误

java - 使用牛顿法求平方根的时间复杂度

linux - 从其他选项卡彻底杀死所有 vim 进程

linux - Glade 和 GTK : which version to choose?

java - 无法从 Java 中的 COM 端口读取串行数据

Java 循环中的异步休息调用

java - react 堆项目 : Multiple Publishers making HTTP calls and one Subscriber to handle all results