用java锁定文件



如何在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();
}

最新更新