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