Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/385.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在Linux中使用RandomAccessFile将数据写入磁盘的位置?_Java_Linux_Java Io_Randomaccessfile - Fatal编程技术网

Java 在Linux中使用RandomAccessFile将数据写入磁盘的位置?

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".

我遇到了一个困扰我一段时间的问题。 在Linux中,我以root用户身份登录。然后我编写了一个Java程序,首先使用
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中,文件有名称。“-丹尼斯·里奇。