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