FileLockを使用して Windows 環境で Java を使用してファイルをロックしようとしていますが、問題が発生しました。ファイルをロックした後でも、少なくともある程度のレベルで他のプロセスからアクセスできます。
コード例は次のとおりです。
public class SimpleLockExample {
public static void main(String[] args) throws Exception {
String filename = "loremlipsum.txt";
File file = new File(filename);
RandomAccessFile raf = new RandomAccessFile(file, "rw");
FileChannel channel = raf.getChannel();
FileLock lock = null;
try {
lock = channel.tryLock();
String firstLine = raf.readLine();
System.out.println("First line of file : " + firstLine);
waitForEnter();
lock.release();
} catch (OverlappingFileLockException e) {
e.printStackTrace();
}
lock.release();
System.out.println("Lock released");
channel.close();
}
private static void waitForEnter() throws Exception {
BufferedReader reader =
new BufferedReader(new InputStreamReader(System.in));
reader.readLine();
reader.close();
}
}
さて、この例でファイルをロックすると、ロックされます:
- Windows では削除できません。
- Eclipseはそれを開くことを拒否します
...しかし、まだ完全に防弾というわけではありません:
- たとえば、Scite (テキスト エディター) で開いた場合、コンテンツは表示されませんが、ファイルを保存することを選択した場合 (開いたときに空であるか、いくつかのコンテンツが書き込まれている)、成功し、ファイルの内容がクリアされます.. . (Scite で何かを書いたとしても、その後にコンテンツは存在しません)
Windows で Java を使用している他のプロセスによってファイルが完全に上書き/消去されるのを防ぐ方法はありますか?
私の理解が正しければ、私は専用ロックATMを使用しています。共有ロックを使用すると、さらに多くのことができます。
このテストは Windows 2000 で実行されました。
br, トウコ