今天學的是如何複製資料夾含裡面的檔案
CopyFiles.java
import java.io.IOException;
import java.nio.file.FileVisitResult;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.SimpleFileVisitor;
import java.nio.file.attribute.BasicFileAttributes;public class CopyFiles extends SimpleFileVisitor<Path> { private Path sourceRoot;
private Path targetRoot; public CopyFiles(Path sourceRoot, Path targetRoot) {
this.sourceRoot = sourceRoot;
this.targetRoot = targetRoot;
} @Override
public FileVisitResult visitFileFailed(Path file, IOException exc) throws IOException {
System.out.println("Error accessing file: " + file.toAbsolutePath() + " " + exc.getMessage());
return FileVisitResult.CONTINUE;
} @Override
public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) throws IOException { Path relativizePath = sourceRoot.relativize(dir);
System.out.println("RelativizePath = " + relativizePath);
Path copyDir = targetRoot.resolve(relativizePath);
System.out.println("Resolved path for copy = " + copyDir); try {
Files.copy(dir, copyDir);
} catch (IOException e) {
System.out.println(e.getMessage());
return FileVisitResult.SKIP_SUBTREE;
} return FileVisitResult.CONTINUE; } @Override
public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
Path relativizePath = sourceRoot.relativize(file);
System.out.println("RelativizePath = " + relativizePath);
Path copyDir = targetRoot.resolve(relativizePath);
System.out.println("Resolved path for copy = " + copyDir); try {
Files.copy(file, copyDir);
} catch (IOException e) {
System.out.println(e.getMessage());
} return FileVisitResult.CONTINUE;
}
}System.out.println("--- Copy Dir2 to Dir4 / Dir2Copy ---");
Path copyPath = FileSystems.getDefault().getPath(String.join(File.separator, "src", "nonBlockingIO", "path", "copyExamples", "Dir4","Dir2Copy"));
// FileTree/Dir4/Dir2Copy
Path dir2Path = FileSystems.getDefault().getPath(String.join(File.separator, "src", "nonBlockingIO", "path", "copyExamples", "Dir2"));
try{
Files.walkFileTree(dir2Path,new CopyFiles(dir2Path,copyPath) );
}catch (IOException e){
System.out.println(e.getMessage());
}
輸出結果:
— — Copy Dir2 to Dir4 / Dir2Copy — -
RelativizePath =
Resolved path for copy = src\nonBlockingIO\path\copyExamples\Dir4\Dir2Copy
RelativizePath = Dir3
Resolved path for copy = src\nonBlockingIO\path\copyExamples\Dir4\Dir2Copy\Dir3
RelativizePath = Dir3\Dir4
Resolved path for copy = src\nonBlockingIO\path\copyExamples\Dir4\Dir2Copy\Dir3\Dir4
RelativizePath = Dir3\Dir4\Dir5
Resolved path for copy = src\nonBlockingIO\path\copyExamples\Dir4\Dir2Copy\Dir3\Dir4\Dir5
RelativizePath = Dir3\Dir4\Dir5\Dir6
Resolved path for copy = src\nonBlockingIO\path\copyExamples\Dir4\Dir2Copy\Dir3\Dir4\Dir5\Dir6
RelativizePath = Dir3\Dir4\Dir5\Dir6\Dir7
Resolved path for copy = src\nonBlockingIO\path\copyExamples\Dir4\Dir2Copy\Dir3\Dir4\Dir5\Dir6\Dir7
RelativizePath = Dir3\file1.txt
Resolved path for copy = src\nonBlockingIO\path\copyExamples\Dir4\Dir2Copy\Dir3\file1.txt
RelativizePath = Dir3\file2.txt
Resolved path for copy = src\nonBlockingIO\path\copyExamples\Dir4\Dir2Copy\Dir3\file2.txt
RelativizePath = file1.txt
Resolved path for copy = src\nonBlockingIO\path\copyExamples\Dir4\Dir2Copy\file1.txt
RelativizePath = file2.txt
Resolved path for copy = src\nonBlockingIO\path\copyExamples\Dir4\Dir2Copy\file2.txt
RelativizePath = file3.dat
Resolved path for copy = src\nonBlockingIO\path\copyExamples\Dir4\Dir2Copy\file3.dat