我有一个服务,它将填充我需要定期复制到另一个目录的目录。源将定期填充。
当我复制目录时,它会非常大,所以我只想在目标中添加文件,或者覆盖不属于同一文件的文件(例如文件大小不匹配或修改日期)。
有一种简单的方法吗?我知道FileUtils,但我不清楚它是否会始终覆盖所有文件,以及"合并"这意味着,特别是如果它不会复制已经匹配的文件。
答案 0 :(得分:1)
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;
}
});
}