在java中锁定文件

时间:2014-10-15 11:10:12

标签: java file inputstream

如何以一种其他非JVM进程无法访问写访问权限的方式锁定JVM中的文件? 我需要读取文件,在阅读时我想确保其他进程不修改文件。 我尝试创建FileInputStream并确实将文件锁定以进行删除,但不会禁止修改文件。

我也试过RandomAccessFile

RandomAccessFile raf = new RandomAccessFile(file, "rw");
InputStream is = Channels.newInputStream(raf.getChannel());

但它也不会阻止修改。

PS:在代码中我还需要InputStream

2 个答案:

答案 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();
}