首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用java FileChannel FileLock防止文件写入但允许读取

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

Stack Overflow用户
提问于 2014-03-25 21:25:20
回答 1查看 1.6K关注 0票数 5

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

我希望对一个文件有一个独占的写锁,但是允许从任何进程读取。

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

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

EN

回答 1

Stack Overflow用户

发布于 2014-03-25 23:31:16

  • FileChannel.lock()处理的是文件区域,而不是文件本身。
  • 锁可以是共享的(许多读取器,没有作者),也可以是独占的(一个作者,没有读取器)。

我想你正在寻找一个有点不同的特性-打开一个文件进行写入,同时允许其他进程打开它以供阅读,而不是用于写入。

这可以通过具有非标准开放选项的Java7 FileChannel.open API实现:

代码语言:javascript
复制
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中存在的一个非标准选项。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22646598

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档