当我想删除文件时,我应该锁定它吗



我在本地文件系统上有一堆文件。我的服务器将提供这些文件。在某些情况下,服务器将收到删除文件的指令。目前我正在使用FileChannel.lock()获取文件的锁定,这主要是为了确保在我尝试删除文件时,其他进程不会编辑该文件。
如果我成功获取了锁定,我可以立即删除该文件吗,还是需要先释放锁定
像这样:

FileOutputStream out = new FileOutputStream(file);
FileChannel channel = out.getChannel();
FileLock lock = channel.lock();
if(lock.isValid() && !lock.isShared()){
Path filePath = Paths.get(file.getPath());
Files.delete(filePath);
}

删除文件后是否需要解除锁定?

或者应该是这样(添加了lock.release()(:

FileOutputStream out = new FileOutputStream(file);
FileChannel channel = out.getChannel();
FileLock lock = channel.lock();
if(lock.isValid() && !lock.isShared()){
lock.release();
Path filePath = Paths.get(file.getPath());
Files.delete(filePath);
}

编辑:
所以上面的代码无论如何都不起作用,因为你不能用FileInputStream修改文件,因为它当然是只读的。我已经修改了上面的代码,改为使用FileOutputStream,但它仍然不能完全工作,因为即使我从通道中释放了锁,file对象仍然有一个锁。所以我修改了代码如下:

FileOutputStream out = new FileOutputStream(file);
FileChannel channel = out.getChannel();
FileLock lock = channel.lock();
if(lock.isValid() && !lock.isShared()){
channel.close();
boolean deleted = file.delete();
logger.info("{} @{} File {} deleted: {}", id, type, file.getName(), deleted);
}

这似乎不出所料。我仍然想知道这是否安全,或者是否有更好的方法?

文件锁定在删除文件时不起作用。只有当其他进程想要编辑同一文件时,文件锁定才会起作用。在删除文件之前,您需要解除锁定并关闭通道

相关内容

  • 没有找到相关文章

最新更新