1

每次将文件从源文件夹移动并将其替换为循环中具有相同名称的目标文件夹时,我都会创建,这就是问题所在:

对于第一次移动和替换,它运行良好,然后它大喊该进程无法访问该文件,因为它正在被另一个进程使用。替换目标文件夹中的文件时,这是移动文件并每次替换它的方法

  public static void moveAndReplaceFile(String source, String destination) {
        try {
            Files.move(
                    Paths.get(source),
                    Paths.get(destination),
                    StandardCopyOption.REPLACE_EXISTING);
        } catch (IOException e) {
            LOGGER.error("Fail when moving and replacing");
        }
    }

你们能帮帮我吗?提前致谢

4

2 回答 2

0

如果它是您正在使用的网络存储,那么这可能会发生。作为一种解决方法,您可以尝试在执行 Files.Move API 之前添加 60 秒的睡眠。

于 2020-11-30T11:53:23.203 回答
0

如果支持,我建议您添加 ATOMIC_MOVE 选项:

public static void moveAndReplaceFile(String source, String destination) {
    try {
        Files.move(
                Paths.get(source),
                Paths.get(destination),
                StandardCopyOption.REPLACE_EXISTING, 
                StandardCopyOption.ATOMIC_MOVE);
    } catch (IOException e) {
        LOGGER.error("Fail when moving and replacing");
    }
}

请参阅:https ://docs.oracle.com/javase/tutorial/essential/io/move.html

于 2020-11-30T12:16:08.237 回答