SimpleFileVisitor快速遍歷文件夾內容輸出到文件

有時候,爲了快速複製很多文件裏的內容合併到一個文件中,則可以採用如下方式:

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;
        }

    }

}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章