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 バイト目までの領域は、他の人が読み取ってはいけません。しかし、実際にはそうではありません。
しかし、何か問題があるようです。ファイルが排他的にロックされている場合、他のユーザーはアクセスできません。しかし、そうではないようです。