我正在创建一个简单的应用程序,用于打开和编辑XML文件。这些文件位于本地文件夹中,可以被多个应用程序实例访问。我想要做的是锁定每个被应用程序实例打开的文件,以防其他实例访问它。
为了实现这一点,我使用以下代码:
function void readFile(){
为了实现这一点,我使用以下代码:
function void readFile(){
File xmlFile = new File("myFile.xml");
RandomAccessFile raf = new RandomAccessFile(xmlFile, "rw");
FileLock fl = raf.getChannel().tryLock();
if(fl==null){
System.out.println("file already locked by another instance");
}else{
setCurrentFile(raf);
setLock(fl);
System.out.println("file successfully locked by this instance");
}
由于我希望在编辑文件时保持锁定状态,因此我不关闭 raf 也不释放 fl。
此时,任何试图访问被锁定文件的应用程序实例都无法成功。到目前为止还不错。
我观察到以下奇怪的现象:
如果在获取文件锁之后,在同一文件上打开 FileInputStream,即使 FileLock 对象仍然有效(isValid 返回 true),其他应用程序实例现在也可以访问正在编辑的文件。
我觉得这个行为很奇怪。 有人能解释一下为什么会发生这种情况吗?
希望以上内容清晰明了。 提前感谢!