Java 在Linux中使用RandomAccessFile将数据写入磁盘的位置?
我遇到了一个困扰我一段时间的问题。 在Linux中,我以root用户身份登录。然后我编写了一个Java程序,首先使用Java 在Linux中使用RandomAccessFile将数据写入磁盘的位置?,java,linux,java-io,randomaccessfile,Java,Linux,Java Io,Randomaccessfile,我遇到了一个困扰我一段时间的问题。 在Linux中,我以root用户身份登录。然后我编写了一个Java程序,首先使用RandomAccessFile将数据写入磁盘,然后删除该文件 但是程序继续运行,没有抛出任何异常! 但是我甚至在Linux页面缓存中也找不到写入的数据! 以下是代码片段: RandomAccessFile file = new RandomAccessFile("/opt/temp.log", "rw"); byte[] content = "Hello!!!\n".
RandomAccessFile
将数据写入磁盘,然后删除该文件
但是程序继续运行,没有抛出任何异常!
但是我甚至在Linux页面缓存中也找不到写入的数据!
以下是代码片段:
RandomAccessFile file = new RandomAccessFile("/opt/temp.log", "rw");
byte[] content = "Hello!!!\n".getBytes();
for (int i = 0; i < 2; i++) {
file.write(content, 0, content.length);
Thread.sleep(3000);//just for lefting time to delete the "temp.log" file!
}
RandomAccessFile file = new RandomAccessFile("/opt/temp.log", "rw");
for (int i = 0; i < 2; i++) {
file.writeBytes("Hello!!!\n");
Thread.sleep(3000);//just for lefting time to delete the "temp.log" file!
}
发生了什么事?
RandomAccessFile
中是否存在缺陷?这在POSIX/Unix系统和设计严重受POSIX/Unix类Linux影响的系统中是意料之中的。Unix系统中的文件将保持可读写,只要存在引用该文件的内容。文件系统中的文件可以有多个名称(硬链接),但进程也可以在文件上有一个打开的文件句柄或mmap。只要至少有一个文件仍然处于活动状态,系统就不会真正释放该文件
是,这意味着从文件系统中删除文件后,进程仍然可以继续读写文件。无论出于何种目的,一个没有名字的文件仍然是一个功能完善的文件,仍然会占用磁盘空间。“但程序继续运行”当然,它会运行1000*30s=8小时20分钟。--“如果我将file.write方法更改为file.writeBytes”您不能只更改方法名称,您必须还更改了其他内容,因此请编辑问题并向我们展示您编写的备用代码。这更多是关于Unix中删除的文件的。另外:您希望发生什么?内存中的文件数据和磁盘上的文件没有完全同步。它们是两种不同的东西,你可以改变其中一种而不影响另一种。所以你所说的一切都是完全合理的,尽管你似乎对此感到惊讶。所以,请告诉我你期望发生什么,为什么你期望,为什么它很重要(你想解决什么问题?),否则我不确定任何人会理解你的意图。文件句柄在你关闭之前仍然是打开的;删除打开了文件句柄的文件时,它是。。。。但是目录条目已被删除,因此您无法找到它。但是,程序可以继续向其写入。在Windows中,由于文件处于打开状态,删除将失败。'在Multix中,名称包含文件。在Unix中,文件有名称。“-丹尼斯·里奇。