有時候,爲了快速複製很多文件裏的內容合併到一個文件中,則可以採用如下方式:
public class CodeOutput { public static void main(String[] args) throws Exception { // 需要遍歷的文件夾 String fileDirectory = "E:\\doc"; // 包含的文件名後綴 String includeFileNameSuffix = ".java"; // 輸出的文件名 String outputFilePath = "D:/code.txt"; Path startingDir = Paths.get(fileDirectory); FindFileVisitor findJavaVisitor = new FindFileVisitor(includeFileNameSuffix); Files.walkFileTree(startingDir, findJavaVisitor); try { FileOutputStream fos = new FileOutputStream(outputFilePath); FileChannel channel = fos.getChannel(); findJavaVisitor.getFileNameList().forEach(name -> { System.out.println(name); if (!name.endsWith("CodeOutput.java")) { Path path = Paths.get(name); try { byte[] bytes = Files.readAllBytes(path); channel.write(ByteBuffer.wrap(bytes)); } catch (IOException e) { e.printStackTrace(); } } }); } catch (Exception e) { e.printStackTrace(); } } static class FindFileVisitor extends SimpleFileVisitor<Path> { private String fileNameSuffix; public FindFileVisitor(String fileNameSuffix) { this.fileNameSuffix = fileNameSuffix; } private List<String> fileNameList = new ArrayList<>(); public List<String> getFileNameList() { return fileNameList; } @Override public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) { String fileName = file.toString(); if (fileName.endsWith(fileNameSuffix)) { fileNameList.add(fileName); } return FileVisitResult.CONTINUE; } @Override public FileVisitResult visitFileFailed(Path file, IOException exc) throws IOException { return FileVisitResult.CONTINUE; } } }