gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 13:32:14 24 4
gpt4 key购买 nike

我想我误解了 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 中存在的非标准选项。

关于java - 使用java FileChannel FileLock来防止文件写入但允许读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22646598/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com