使用java FileChannel FileLock防止文件写入但允许读取
我想我误解了FileChannel的锁定功能是如何工作的 我想在文件上有一个独占写锁,但允许从任何进程读取 在运行Java7的Windows7机器上,我可以让FileChannel的锁工作,但它会阻止其他进程的读写 如何实现不允许写入但允许其他进程读取的文件锁定?使用java FileChannel FileLock防止文件写入但允许读取,java,windows,locking,readwritelock,Java,Windows,Locking,Readwritelock,我想我误解了FileChannel的锁定功能是如何工作的 我想在文件上有一个独占写锁,但允许从任何进程读取 在运行Java7的Windows7机器上,我可以让FileChannel的锁工作,但它会阻止其他进程的读写 如何实现不允许写入但允许其他进程读取的文件锁定? FileChannel.lock()处理文件区域,而不是文件本身 锁可以是共享的(多个读卡器,没有写卡器),也可以是独占的(一个写卡器,没有读卡器) 我想您正在寻找一个稍微不同的功能—打开一个文件进行写入,同时允许其他进程打开它进行
处理文件区域,而不是文件本身FileChannel.lock()
- 锁可以是共享的(多个读卡器,没有写卡器),也可以是独占的(一个写卡器,没有读卡器)
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中存在的一个非标准选项。bah:-(为什么他们让它存在于com.sun.
中,但用户不可用?@JasonS它对用户可用(如果您正在运行Oracle JDK或OpenJDK)。您也需要NOSHARE\u DELETE
,这样文件就不能被其他进程删除(FileChannel.lock()
防止删除)