如果文件不匹配,则递归地将一个目录复制到另一个目录

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如果文件不匹配,则递归地将一个目录复制到另一个目录相关的知识,希望对你有一定的参考价值。

我有一个服务,将填充我需要定期复制到另一个目录的目录。源将定期填充。

当我复制目录时,它会非常大,所以我只想在目标中添加文件,或者覆盖不同文件的文件(例如文件大小不匹配或修改日期)。

有一个简单的方法吗?我知道FileUtils,但我不清楚它是否总是会覆盖所有文件,而“合并”在这里意味着什么,特别是如果它不会复制已经匹配的文件。

答案

Files.walkFileTree和文件的其他方法可以做到:

public void copyTree(Path source,
                     Path destination)
throws IOException {

    Files.walkFileTree(source,
        new SimpleFileVisitor<Path>() {
            @Override
            public FileVisitResult preVisitDirectory(Path dir,
                                                     BasicFileAttributes attr)
            throws IOException {
                Path destPath = destination.resolve(source.relativize(dir));
                Files.createDirectories(destPath);
                return FileVisitResult.CONTINUE;
            }

            @Override
            public FileVisitResult visitFile(Path file,
                                             BasicFileAttributes attr)
            throws IOException {

                Path destPath = destination.resolve(source.relativize(file));

                FileTime sourceTime = Files.getLastModifiedTime(file);
                FileTime destinationTime = Files.getLastModifiedTime(destPath);
                if (!Files.exists(destPath) ||
                    sourceTime.compareTo(destinationTime) > 0) {

                    Files.copy(file, destPath,
                        StandardCopyOption.COPY_ATTRIBUTES,
                        StandardCopyOption.REPLACE_EXISTING);
                }

                return FileVisitResult.CONTINUE;
            }
        });
}

以上是关于如果文件不匹配,则递归地将一个目录复制到另一个目录的主要内容,如果未能解决你的问题,请参考以下文章

如何递归地将目录复制到另一个目录并仅替换未更改的文件?

linux 怎么样复制文件夹内所有文件到另一个文件夹

linux下怎么把一个文件复制到另一个文件夹

linux复制指定目录下的全部文件到另一个目录

linux复制指定目录下的全部文件到另一个目录中

linux怎么将一个文件移动到另一个目录下