如何以一种其他非JVM进程无法访问写访问权限的方式锁定JVM中的文件?
我需要读取文件,在阅读时我想确保其他进程不修改文件。
我尝试创建FileInputStream
并确实将文件锁定以进行删除,但不会禁止修改文件。
我也试过RandomAccessFile
:
RandomAccessFile raf = new RandomAccessFile(file, "rw");
InputStream is = Channels.newInputStream(raf.getChannel());
但它也不会阻止修改。
PS:在代码中我还需要InputStream
答案 0 :(得分:2)
不幸的是,这不是Java可以做的事情 - 可能很大程度上是因为它在不同平台上以不同方式支持,而Java需要维护跨平台兼容性。
我假设,例如,根据您的问题,您在Windows上使用Linux,上述代码甚至无法阻止文件删除。
http://en.wikipedia.org/wiki/File_locking有一些关于文件锁定的详细信息,这解释了这个问题。
答案 1 :(得分:-1)
您是否尝试过使用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();
}