在 Java 中锁定文件通道时获取重叠文件锁定异常



这是代码中存在问题的部分:

FileChannel fileChannel = FileChannel.open(filePath, StandardOpenOption.WRITE);
fileChannel.force(true);
FileLock lock = fileChannel.lock();
fileChannel.truncate(0);
fileChannel.write(buffer);
lock.release();
fileChannel.close();

buffer是一个ByteBuffer,在此代码之前填充了一些数据。

因此,此代码在一个线程中定期完成,没有其他线程使用此锁或访问同一文件。发生的情况是,当我在程序运行时使用记事本访问文件时,我有时会得到OverlappingFileLockException。如果我捕获该异常,线程将循环并一遍又一遍地生成相同的异常,即使我关闭记事本也是如此。我有时也会收到错误:The requested operation cannot be performed on a file with a user-mapped section open,这可能与OverlappingFileLockException有关,也可能无关,但有时出于同样的原因,当我使用记事本打开文件或在程序运行时打开文件属性时,也会发生这种情况。

确保释放锁,即使从写入尝试中引发 I/O 异常。

FileChannel fileChannel = FileChannel.open(filePath, 
StandardOpenOption.WRITE);
fileChannel.force(true);
FileLock lock = fileChannel.lock();
try {
fileChannel.truncate(0);
fileChannel.write(buffer);
} finally {
lock.release();
fileChannel.close();
}

相关内容

  • 没有找到相关文章

最新更新