【发布时间】:2009-08-27 06:58:49
【问题描述】:
我正在尝试使用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, 图子
【问题讨论】: