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

问题描述 投票:0回答:1

我想我误解了

FileChannel
的锁定功能的工作原理。

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

在运行 Java 7 的 Windows 7 计算机上,我可以让

FileChannel
的锁发挥作用,但它会阻止其他进程的读取和写入。

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

java windows locking readwritelock
1个回答
6
投票
  • 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 中存在的非标准选项。

© www.soinside.com 2019 - 2024. All rights reserved.