如何在Java中读取和处理文件时防止被覆盖?

4

我需要使用Java读取和处理一些较大的文件,我想知道是否有一种明智的方法来保护该文件,使其在我读取和处理时不会被其他进程覆盖?

也就是说,有一种方法可以将其设置为只读,保持“打开”状态或其他方式...

这将在Windows环境下完成。

敬礼, Touko

2个回答

10

你需要一个FileLock

FileChannel channel = new RandomAccessFile("C:\\foo", "rw").getChannel();

// Try acquiring the lock without blocking. This method returns
// null or throws an exception if the file is already locked.
FileLock lock = channel.tryLock();

// ...  

// release it
lock.release();

为简单起见,我省略了一个包含try/finally块的封闭块,但你在生产代码中不应该这样做。


嗨,还有什么方法可以防止文件被编辑吗?如果我在Windows下获取独占锁并使用文本编辑器(例如Scite)打开它,则会以空内容打开,但如果我写入并保存,则最终文件将被清空?相反,如果我尝试使用Eclipse打开它,则会告诉我该文件无法打开,因为它被另一个进程锁定...这可能最终归结于Windows,但有人有什么想法吗? - Touko

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接