【发布时间】:2014-12-10 10:38:10
【问题描述】:
如何将文件锁定在 JVM 中,以使其他非 JVM 进程无法获得写访问权限?
我需要阅读该文件,并且在阅读时我想确保其他进程不会修改该文件。
我尝试创建FileInputStream,它确实锁定了文件以进行删除,但它并不禁止修改文件。
我也试过RandomAccessFile:
RandomAccessFile raf = new RandomAccessFile(file, "rw");
InputStream is = Channels.newInputStream(raf.getChannel());
但它也不会阻止修改。
PS:在代码中我需要 InputStream
【问题讨论】:
-
该代码不起作用。我无法获取打开以供阅读的流的锁定。我得到
java.nio.channels.NonWritableChannelException -
@maks 重复页面上的答案不止一个。
-
@Kenster 但它们都是关于锁定 InputStream 或 RandomAccessFile。关于使用同步块的答案我不考虑
-
如果您的问题是如何阻止其他进程修改文件,这取决于操作系统。例如,在 Unix 上,文件锁是协作的。只有专门为此编写的进程才会兑现锁。
标签: java file inputstream