可能重复:
Problem with Java file locking mechanism (FileLock etc)
在下面的代码中,我想测试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 test”两次时,第一个应该锁定文件in.txt而第二个应该不能访问in.txt,然后不应该在屏幕上打印任何东西。但事实是第二个也在屏幕上打印字符串,即使它按预期返回。其他人不应读取0到3字节的区域。但事实上并非如此。
但似乎有些不对劲。如果文件是独占锁定的,则其他人无法访问。但似乎没有。
答案 0 :(得分:1)
FileLock在Linux下不起作用(至少在我试过的时候不是redhat)。编辑:那不是真的。我做错了: - )
在Windows Vista / 7/8下,我上次尝试时工作正常。
也许有适用于Linux的文件系统实现。您必须使用[file] .lck临时文件的创建来模拟锁定(尽管在File.create的文档中不建议这样做。)
如果文件不存在,有一种特殊的原子方法来创建文件