使用java FileChannel FileLock来防止文件写入,但允许读取



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

我想在一个文件上有一个独占的写锁,但是允许从任何进程读。

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

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

  • FileChannel.lock()处理文件区域,而不是文件本身。
  • 锁可以是共享的(有很多读,没有写)或独占的(只有一个写,没有读)。

我猜你正在寻找一个有点不同的功能- 打开文件用于写入,同时允许其他进程打开它用于读取但不用于写入。

这可以通过Java 7 FileChannel实现。带有非标准open选项的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中存在的非标准选项

相关内容

  • 没有找到相关文章

最新更新