FileUtils:跳过目标中已有的文件并复制其余文件

FileUtils: Skips files that are already in destination and copy rest of the files

我正在使用以下方法在使用 java 的两个目录之间传输文件。

FileUtils.copyDirectory(sourceDir, destinationDir,fileFilter,false);

但是如果在目标目录中也找到同名文件,源文件将覆盖它。我想要的是排除目标中也存在的那些文件并复制其余文件,最终防止覆盖..

一种方法是自己写:

try (Stream<Path> files = Files.walk(sourceDir.toPath())
    .filter(f -> fileFilter.accept(f.toFile()))) {

    files.forEach(src -> {
        Path dest = destinationDir.toPath().resolve(
            sourceDir.toPath().relativize(src));

        if (!Files.exists(dest)) {
            try {
                if (Files.isDirectory(src)) {
                    Files.createDirectories(dest);
                } else {
                    Files.copy(src, dest,
                        StandardCopyOption.COPY_ATTRIBUTES);
                }
            } catch (IOException e) {
                throw new UncheckedIOException(e);
            }
        }
    })
}

或者,您可以只修改过滤器:

FileFilter oldFilter = fileFilter;
fileFilter = f -> oldFilter.accept(f) &&
    !Files.exists(destinationDir.toPath().resolve(
            sourceDir.toPath().relativize(f.toPath())));