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 / me2
\ブレークポイントを"intread = fileReader.read();"に設定します。
3\デバッグを開始します
4\rm -f / home / brian / Desktop / me5
\最後にジャンプします<========「1」はまだコンソールに出力されます...

まあ...これは私には本当に奇妙です。私のように、例外がスローされるはずです。誰か説明できますか?コメントや提案をいただければ幸いです。

4

2 に答える 2

5

ほとんどのUnixライクなシステムでは、すべての参照がなくなるまでファイルのデータはディスク上に残ります。これには、パス名(ハードリンク)と開いているファイルハンドルの両方が含まれます。

于 2012-04-28T01:53:50.757 に答える
2

これは、少なくともUNIXライクなオペレーティングシステムでは予想される動作です。開いているファイル記述子がある限り、rm'dファイルのブロックは割り当てられたままで、そのファイル記述子を介してアクセスできます。

ただし、削除されたファイル名を使用して新しいファイル記述子を開くことはできないと思います。

于 2012-04-28T01:53:07.950 に答える