5

我想我误解了 FileChannel 的锁定功能是如何工作的。

我想对文件进行独占写锁定,但允许从任何进程读取。

在运行 Java 7 的 Windows 7 机器上,我可以让 FileChannel 的锁工作,但它会阻止其他进程的读取和写入。

如何实现不允许写入但允许其他进程读取的文件锁定?

4

1 回答 1

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 中存在的非标准选项。

于 2014-03-25T23:31:16.803 回答