gpt4 book ai didi

java - 当我想删除一个文件时,我应该锁定它吗?

转载 作者:搜寻专家 更新时间:2023-10-31 20:31:43 24 4
gpt4 key购买 nike

我在本地文件系统上有一堆文件。我的服务器将提供这些文件。在某些情况下,服务器会收到删除文件的指令。目前我正在使用 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 代替,但它仍然不能正常工作,因为即使我从 channel 中释放了锁,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);
}

这似乎按预期工作。我仍然想知道这是否安全,或者是否有更好的方法?

最佳答案

文件锁定在删除文件时不起作用。文件锁只有在其他一些进程想要编辑同一个文件时才会起作用。删除文件前需要释放锁并关闭 channel

关于java - 当我想删除一个文件时,我应该锁定它吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53064571/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com