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

我想我误解了FileChannel的lockingfunction是如何工作的。

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

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

我怎样才能实现一个文件锁不允许写入,但允许其他进程读取?

Solutions Collecting From Web of "使用java FileChannel FileLock来防止文件写入,但允许读取"

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