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

也就是说,可以通过某种方式使其保持只读状态,使其保持“打开”状态。

这可以在Windows环境中完成。

br,
桐子

#1 楼

您需要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,但是有人有想法吗?

–桐子
09年8月14日在7:17

#2 楼

工作正常,但遇到了一些问题:由于锁定似乎不是绝对的。