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

嗯……这对我来说真的很奇怪。好像我应该抛出一个异常。谁能给出任何解释?任何意见或建议表示赞赏。

4

2 回答 2

5

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

于 2012-04-28T01:53:50.757 回答
2

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

但是,我希望您不能通过已删除的文件名向他们打开新的文件描述符。

于 2012-04-28T01:53:07.950 回答