我正在尝试使用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 上运行的。
兄弟,图科