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;
}
});
}
출처
2017-12-19 18:03:01
VGR
는 지금까지 아무것도 시도? – Verv
파일 크기를 확인하는 대신 이전 파일의 해시와 비교하여 새 파일의 해시를 확인해야합니다. –
'rsync'명령과 비슷합니다. rsync가 수행하는 Java 구현을 위해 네트를 샅샅이 살펴 보셨습니까? 아마 바퀴를 다시 발명하는 것보다 낫지. 그들 중 일부는 빠른 복사를 위해 압축을 지원할 수도 있습니다. – Veera