如果文件不匹配,则递归地将一个目录复制到另一个目录
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;
}
});
}
以上是关于如果文件不匹配,则递归地将一个目录复制到另一个目录的主要内容,如果未能解决你的问题,请参考以下文章