1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122
| package gy.finolo;
import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.nio.file.*; import java.nio.file.attribute.BasicFileAttributes;
import static java.nio.file.FileVisitResult.CONTINUE;
public class CopyUtils {
public static void copy2Directory(Path inPath, Path outDirPath) throws IOException {
if (!Files.exists(outDirPath)) { Files.createDirectories(outDirPath); }
if (Files.isDirectory(inPath)) { copyFilesInDirectory2Directory(inPath, outDirPath); } else { copyFile2Directory(inPath, outDirPath); }
}
private static void copyFilesInDirectory2Directory(Path inDirPath, Path outDirPath) throws IOException { DirectoryStream<Path> paths = Files.newDirectoryStream(inDirPath); for (Path path : paths) {
if (Files.isDirectory(path)) { Path subOutDirPath = outDirPath.resolve(inDirPath.relativize(path)); if (!Files.exists(subOutDirPath)) { Files.createDirectories(subOutDirPath); } copyFilesInDirectory2Directory(path, subOutDirPath); } else { Path subOutDirPath = outDirPath.resolve(inDirPath.relativize(path.getParent())); copyFile2Directory(path, subOutDirPath); } } }
private static void copyFile2Directory(Path inFilePath, Path outDirPath) throws IOException { Path fileName = inFilePath.getFileName(); Path outFilePath = outDirPath.resolve(fileName);
int bufSize = 8 * 1024; byte[] buffer = new byte[bufSize]; int len;
try (InputStream is = Files.newInputStream(inFilePath); OutputStream os = Files.newOutputStream(outFilePath, StandardOpenOption.TRUNCATE_EXISTING, StandardOpenOption.WRITE, StandardOpenOption.CREATE)) { while ((len = is.read(buffer)) > 0) { os.write(buffer, 0, len); } } }
public static void copy2DirectoryV2(Path inPath, Path outDirPath) throws IOException { if (!Files.exists(outDirPath)) { Files.createDirectories(outDirPath); }
Files.walkFileTree(inPath, new SimpleFileVisitor<Path>() { @Override public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) throws IOException { System.out.println("processing DIR: " + dir); Path subOutDirPath = outDirPath.resolve(inPath.relativize(dir));
if (!Files.exists(subOutDirPath)) { Files.createDirectories(subOutDirPath); } return CONTINUE; }
@Override public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException { System.out.println("processing FILE: " + file); Path outPath; if (inPath.equals(file)) { outPath = outDirPath.resolve(file.getFileName()); } else { outPath = outDirPath.resolve(inPath.relativize(file)); } Files.copy(file, outPath); return CONTINUE; } }); }
public static void main(String[] args) {
Path inPath = Paths.get("/usr/local"); Path outDirPath = Paths.get("/opt");
try { CopyUtils.copy2DirectoryV2(inPath, outDirPath); } catch (IOException e) { e.printStackTrace(); }
} }
|