public Class CopyAndWrite { public static final String SOURCES = "D:\\sources"; public static final String TARGET = "D:\\target"; public static void main (String[]args) throws IOException { Path startingDir = Paths.get(SOURCES); Files.walkFileTree(startingDir, new FindJavaVisitor()); } private static class FindJavaVisitor extends SimpleFileVisitor<Path> { @Override public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) throws IOException { if (!StringUtils.equals(dir.toString(), SOURCES)) { Path targetPath = Paths.get(TARGET + dir.toString().substring(SOURCES.length())); if (!Files.exists(targetPath)) { Files.createDirectory(targetPath); } } return FileVisitResult.CONTINUE; } @Override public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException { Path targetPath = Paths.get(TARGET + file.toString().substring(SOURCES.length())); copyFile(targetPath, Files.readAllBytes(file)); return FileVisitResult.CONTINUE; } } private static void copyFile (Path path,byte[] bytes){ // write file try { Files.write(path, bytes); } catch (IOException e) { e.printStackTrace(); } } }