0

ファイルに対してJavaランダムアクセスファイルオブジェクトを作成した場合。ファイルの名前が変更されるとどうなりますか?

ケース1。たとえば、test.logに対してRAFオブジェクトを作成したとします。次に、次のようにしてtest.log->test1.logの名前を変更しました。

mv test.log test1.log

この場合、私のRAFオブジェクトはどうなりますか?

ケース2。ここでも、test.logに対してRAFオブジェクトを作成します。

mv test.log test1.log
touch test.log

この場合、私のオブジェクトはtest.logまたはtest1.logを指しています。

ケース3。RAFオブジェクトが最終的にローテーションされるログファイルを指している場合はどうなりますか?

最も重要なことは、誰かが私に隠れて何が起こっているのかを説明できますか?RAFオブジェクトが実際のファイルを指す/参照する方法、ファイルの名前が変更または削除されたときの動作など。

4

2 に答える 2

4

私は少しテストをしました:

  • ランダム アクセス ファイルを作成し、joption ペインをポップアウトしました。
  • ダイアログが開いている間に、完全に許可されたファイルを削除しました。
  • 次に、ファイルに書き込もうとして閉じましたが、それは静かに起こりました。

少なくとも私の Linux マシンでは、そのように動作します。

ファイルを移動しようとすると、内容が正常に書き込まれました。

ケース 2 の場合、コンテンツは、指している「test1.log」に書き込まれます。

3D の場合、いいえ、ファイルは最終的に回転しません。

前回の勝手な推測で申し訳ありません。

于 2012-05-21T18:21:47.937 に答える
0

===========================

自分のテスト

===========================

    RandomAccessFile rand = new RandomAccessFile("/tmp/test_log", "rw"); 
    System.out.print("file created"); //======lineA======
    while (true) {
        Thread.sleep(8000);
        System.out.print("finish sleeping");
        int i = (int) rand.length(); //=====lineB=====
        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
        }
    }

テスト ケース 1:

lineA の後、lineB の前にある test_log ファイルを削除すると、問題や例外なくファイル全体の読み取りが終了します。

テスト ケース 2:

mv /tmp/test_log /tmp/test_log.bk 行 A の後、行 B の前でも、問題や例外なくファイル全体の読み取りが終了します。

テスト ケース 3:

テスト ケース 2 に従って、/tmp/test_log.bk に余分な行を書き始めます。

echo "test line1 bla bla" >> /tmp/test_log.bk
echo "test line2 bla bla" >> /tmp/test_log.bk

ファイル全体を読み取る問題に加えて、test_log.bk に追加された新しい行も読み取ります。

于 2012-05-23T09:02:47.823 に答える