我想我误解了
FileChannel
的锁定功能的工作原理。
我想对文件有独占写锁,但允许从任何进程读取。
在运行 Java 7 的 Windows 7 计算机上,我可以让
FileChannel
的锁发挥作用,但它会阻止其他进程的读取和写入。
如何实现不允许写入但允许其他进程读取的文件锁?
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 中存在的非标准选项。