如何在JVM中锁定文件,使其他非JVM进程无法获得写访问权限?我需要读取该文件,在读取时,我希望确保其他进程不会修改该文件。我尝试创建FileInputStream
,它确实会锁定文件以进行删除,但并不禁止修改文件。
我也试过RandomAccessFile
:
RandomAccessFile raf = new RandomAccessFile(file, "rw");
InputStream is = Channels.newInputStream(raf.getChannel());
但它也不能阻止修改。
PS:在代码中,我需要InputStream
不幸的是,Java无法做到这一点,这可能主要是因为它在不同的平台上以不同的方式得到支持,Java需要保持跨平台兼容性。
例如,从你的问题中,我假设你在Windows上,就像在Linux下一样,上面的代码甚至不会阻止文件删除。
有关文件锁定的详细信息,请访问http://en.wikipedia.org/wiki/File_locking这就解释了这个问题。
您尝试过使用FileLock
吗?用法如下:
FileInputStream in = new FileInputStream(file);
try {
java.nio.channels.FileLock lock = in.getChannel().lock();
try {
Reader reader = new InputStreamReader(in, charset);
//Other actions...
} finally {
lock.release();
}
} finally {
in.close();
}