gpt4 book ai didi

java - Files.move 和 Files.copy 抛出 java.nio.file.FileAlreadyExistsException

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:22:15 24 4
gpt4 key购买 nike

我想删除一个文件并用旧文件重命名另一个文件,但我无法移动这个文件,因为 java 抛出 java.nio.file.FileAlreadyExistsException 以下是代码片段 I正在使用

static void swapData(String origFilePath, String tempFilePath) throws IOException{

Path tempPath = FileSystems.getDefault().getPath(tempFilePath);
Path origPath = FileSystems.getDefault().getPath(origFilePath);
try{
String origFileName = null;
File origFileRef = new File(origFilePath);
if(Files.exists(origPath)){
origFileName = origFileRef.getName();
Files.delete(origPath);
if(Files.exists(origPath))
throw new IOException("cannot able to delete original file");
}
if(origFileName != null)
Files.move(tempPath, tempPath.resolveSibling(origFileName), StandardCopyOption.REPLACE_EXISTING);
}catch(IOException e){
throw e;
}
}

这是我收到的异常 enter image description hereFiles.move(tempPath, tempPath.resolveSibling(origFileName), StandardCopyOption.REPLACE_EXISTING);

此外,当我在 Windows 资源管理器中看到此文件时,它的缩略图存在但无法打开。我不明白为什么会这样,如果我正在使用 REPLACE_EXISTING,为什么会抛出 FileAlreadyExistsException 异常。

我还编辑了之前的问题,因为它没有明确说明。

请帮忙。

阿努杰

最佳答案

检查在运行 Files.moveFiles.copy 时是否有另一个线程持有同一文件资源。我有相同的异常和文件访问症状,并且能够在序列化文件访问后解决它。

此外,通过在执行 Files.copyFiles.move 时使用 REPLACE_EXISTING 选项,您不再需要对多个步骤进行编码删除原始文件然后重命名 tmp,尽管 Files.moveFiles.copy 不保证是原子的。有一个 ATOMIC_MOVE 选项,但是我不喜欢实现特定的保证,如果 javadoc 描述的文件已经存在,则可能会抛出 IOException

ATOMIC_MOVE : The move is performed as an atomic file system operation and all other options are ignored. If the target file exists then it is implementation specific if the existing file is replaced or this method fails by throwing an IOException. If the move cannot be performed as an atomic file system operation then AtomicMoveNotSupportedException is thrown. This can arise, for example, when the target location is on a different FileStore and would require that the file be copied, or target location is associated with a different provider to this object.

关于java - Files.move 和 Files.copy 抛出 java.nio.file.FileAlreadyExistsException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37721668/

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