2012-04-28 104 views
4
import java.io.FileReader; 

public class SimpoTest { 

    public static void main(String[] args) { 
     FileReader fileReader = null; 
     try { 
      fileReader = new FileReader("/home/brian/Desktop/me"); 
      int read = fileReader.read(); 
      System.out.println((char) read); 
     } catch (Exception e) { 
      fileReader = null; 
      e.printStackTrace(); 
     } 
    } 
} 

1 \ echo“1”>/home/brian/Desktop/me
2 \将断点设置为“int read = fileReader.read();”
3 \开始调试
4 \ rm -f/home/brian/Desktop/me
5 \跳到结尾< ========仍然在控制台上输出“1”.. 。

手动删除后,文件内容仍然可以被读出?

好吧......这对我来说真的很奇怪。因为我虽然应该抛出异常。 任何人都可以给出任何解释? 任何意见或建议表示赞赏。

回答

2

这是预期的行为,至少在一个类Unix操作系统上:只要有一个打开的文件描述符,rm'd文件的块将保持分配,并通过该文件描述符访问。

但我希望你不能通过删除的文件名向他们打开一个新的文件描述符。

+0

完全如您所说,我在另一个JVM中运行我的代码,并看到我期望的异常。谢谢克里斯。感谢osaur – 2012-04-29 03:12:43

4

在大多数类Unix系统上,文件的数据保留在磁盘上,直到所有引用都消失;这包括路径名(硬链接)和打开的文件句柄。

+0

,它确实有帮助。 – 2012-04-28 02:22:44

相关问题