-1

これについては、Java/Linuxのコンテキストでのみ説明します。

RandomAccessFile rand = new RandomAccessFile("test.log", "r");

VS

File file = new File("test.log");

作成後、ファイルの読み取りを最後まで開始します。

  1. java.io.Fileの場合、ファイルを読み取る前に物理ファイルをmvまたは削除すると、ファイルの読み取り時にIOExceptionがスローされます。

    public void readIOFile() throws IOException, InterruptedException {
        File file = new File("/tmp/test.log");
        System.out.print("file created"); // convert byte into char
        Thread.sleep(5000);
        while (true) {
            char[] buffer = new char[1024];
            FileReader fr = new FileReader(file);
            fr.read(buffer);
            System.out.println(buffer);
        }
    }
    
  2. ただし、RandomFileAccessの場合、ファイルを読み取る前に物理ファイルをmvまたは削除すると、エラーや例外なしにファイルの読み取りが終了します。

    public void readRAF() throws IOException, InterruptedException {
        File file = new File("/tmp/test.log");
        RandomAccessFile rand = new RandomAccessFile(file, "rw");
        System.out.println("file created"); // convert byte into char
        while (true) {
            System.out.println(file.lastModified());
            System.out.println(file.length());
            Thread.sleep(5000);
            System.out.println("finish sleeping");
            int i = (int) rand.length();
            rand.seek(0); // Seek to start point of file
            for (int ct = 0; ct < i; ct++) {
                byte b = rand.readByte(); // read byte from the file
                System.out.print((char) b); // convert byte into char
        }
    }
    

    }

誰かが私に理由を説明できますか?ファイルのiノードとは何か関係がありますか?

4

4 に答える 4

1

RandomAccessFileまたは言う、および他の多くのJava IO機能とは異なりInputStream、Fileは、ファイルシステムゲートウェイアクションを実行する必要があるときに時々ドラッグする不変のハンドルです。これを参照と考えることができます。ファイルインスタンスは、指定されたパスを指しています。一方、パスの概念は構築時にのみあります。指定されたパスに移動し、ファイルを開いてファイルシステム記述子を取得します。これは、移動時に変更されない、特定のファイルの一意のIDと考えることができます。他のいくつかの操作-そして、ファイルをアドレス指定するために、その存続期間を通してこのIDを使用します。RandomAccessFile

于 2013-07-22T13:31:49.490 に答える
0

フォルダ、ファイルの作成、権限の確認、ファイル名の変更などのOSベースのファイルシステムサービスは、java.io.Fileクラスによって提供されます。

java.io.RandomAccessFileクラスは、データファイルに格納されているレコードへのランダムアクセスを提供します。このクラスを使用して、データの読み取りと書き込み、操作を行うことができます。もう1つの柔軟性は、プリミティブデータ型の読み取りと書き込みができることです。これは、データファイルを処理する際の構造化されたアプローチに役立ちます。

java.ioの入力および出力ストリームクラスとは異なり、RandomAccessFileはファイルの読み取りと書き込みの両方に使用されます。RandomAccessFileは、InputStreamまたはOutputStreamから継承しません。DataInputおよびDataOutputインターフェースを実装します。

于 2012-05-22T10:38:22.763 に答える
0

ここには、ファイルを移動または名前変更したという証拠はまったくありません

プログラムの外部からそれを行った場合、明らかにそれは単なるタイミングの問題です。

古い名前でファイルを開こうとする前にファイルの名前を変更すると、失敗します。確かにこれは明らかですか?

于 2012-06-02T02:10:28.120 に答える
-1

主な違いの1つは、ファイルが直接書き込みまたは読み取りを制御できないことです。これを行うには、IOストリームが必要です。RAFとして、ファイルの書き込みまたは読み取りを行うことができます。

于 2012-05-22T10:42:17.450 に答える