我认为我误解了FileChannel的锁定功能是如何工作的。
我想对文件进行独占写锁定,但允许从任何进程读取。
在运行Java 7的Windows 7计算机上,我可以使FileChannel的锁定工作,但它会阻止来自其他进程的读取和写入。
如何实现不允许写入但允许其他进程读取的文件锁?
答案 0 :(得分:5)
FileChannel.lock()
处理文件区域,而不处理文件本身。我猜你正在寻找一个不同的功能 - 打开一个文件进行写入,同时允许其他进程打开它进行阅读而不是写入。
这可以通过带有非标准打开选项的Java 7 FileChannel.open API来实现:
import static java.nio.file.StandardOpenOption.*;
import static com.sun.nio.file.ExtendedOpenOption.*;
...
Path path = FileSystems.getDefault().getPath("noshared.tmp");
FileChannel fc = FileChannel.open(path, CREATE, WRITE, NOSHARE_WRITE);
注意ExtendedOpenOption.NOSHARE_WRITE
这是Oracle JDK中存在的非标准选项。