1

重複の可能性:
Java ファイル ロック メカニズムの問題 (FileLock など)

FileLock以下のコードでは、クラスをテストしたいと思います。

import java.io.File;
import java.nio.channels.*;
import java.nio.MappedByteBuffer;
import java.io.RandomAccessFile;

class test{
    File f= new File("./in.txt");
    RandomAccessFile in = new RandomAccessFile(f, "rw");
    FileChannel fc = in.getChannel();

    byte[] t = new byte[20];
    in.read(t, 0, 8);
    System.out.println(new String(t));

    FileLock fl = fc.tryLock(0, 4, false);
    if(fl!=null){
        System.out.println("the file has been locked");
        Thread.sleep(10000);
        fl.release();
        System.out.println("no lock!");
    }
    fc.close();
    in.close();
    }
};

しかし、問題は、「Java テスト」を 2 回実行すると、最初のファイルは in.txt ファイルをロックし、2 番目のファイルは in.txt にアクセスできず、画面に何も出力されないことです。しかし、実際には、期待どおりに返されますが、2番目のものも画面に文字列を出力します。また、0 バイト目から 3 バイト目までの領域は、他の人が読み取ってはいけません。しかし、実際にはそうではありません。

しかし、何か問題があるようです。ファイルが排他的にロックされている場合、他のユーザーはアクセスできません。しかし、そうではないようです。

4

1 に答える 1

1

FileLock は Linux では動作しません (少なくとも最後に試した redhat では動作しません)。編集:そうではありません。私はそれを間違えました:-)

Windows Vista/7/8 では、前回試したときに機能しました。

これが機能するLinux用のファイルシステムの実装があるかもしれません。[file].lck 一時ファイルの作成を使用して、ロックをエミュレートする必要があります (ただし、File.create のドキュメントでは推奨されていません)。

ファイルが存在しない場合にファイルを作成するための特別なアトミック メソッドがあります。

于 2013-01-10T21:16:28.863 に答える