我觉得我对FileChannel的锁定功能有所误解。
我想要一个文件的独占写锁,但允许其他进程进行读取。
在运行Java 7的Windows 7机器上,我可以使FileChannel的锁定功能正常工作,但它会阻止其他进程进行读取和写入。
如何实现一种文件锁定,禁止其他进程进行写入,但允许其他进程进行读取?
我觉得我对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中的非标准选项。
com.sun.*
,但不向用户提供呢? - Jason SNOSHARE_DELETE
,这样文件就不能被其他进程删除了(FileChannel.lock()
可以防止删除)。 - hinneLinks