美文网首页
Java遍历目录文件并打印文件结构树

Java遍历目录文件并打印文件结构树

作者: 刘大坝 | 来源:发表于2022-12-27 17:05 被阅读0次

    Java遍历目录文件并打印文件结构树

    在写项目ReadMe文件时,常常要整理项目的结构此处给一个工具参考

    Talk is cheap, Show me the code!

     package com.dc.esc.util;
    
    import java.io.File;
    
    /**
     * @author Calebit
     * @date 2022-12-28 9:46
     */
    public class PrintDirTree {
        // 文件所在的层数
        private int fileLevel;
    
        /**
         * 生成输出格式
         *
         * @param fileOrDirName 输出的文件名或目录名
         * @param level         输出的文件名或者目录名所在的层次
         * @return 输出的字符串
         */
        public String createPrintStr(String fileOrDirName, int level, boolean isDir) {
            // 输出的前缀
            String printStr = (level == 0  ) ? "" : "\t";
            // 按层次进行缩进
            for (int i = 0; i < level; i++) {
                if (i == level - 1) {
                    printStr = printStr + "+——";
                } else {
                    printStr = printStr + "|\t";
                }
            }
    
            if (isDir && level != 0) {
                printStr = printStr + "—+[" + fileOrDirName + "]";
            } else {
                printStr = printStr + " " + fileOrDirName;
            }
            return printStr;
        }
    
        /**
         * 输出初始给定的目录
         *
         * @param dirPath 给定的目录
         */
        public void printDir(String dirPath) {
            // 将给定的目录进行分割
            String[] dirNameList = dirPath.split("\\/");
            // 设定文件level的base
            fileLevel = dirNameList.length;
            // 按格式输出
            for (int i = 0; i < dirNameList.length; i++) {
                System.out.println(this.createPrintStr(dirNameList[i], i, true));
            }
        }
    
        /**
         * 输出给定目录下的文件,包括子目录中的文件
         *
         * @param dirPath 给定的目录
         */
        public void readFile(String dirPath) {
            // 建立当前目录中文件的File对象
            File file = new File(dirPath);
            // 取得代表目录中所有文件的File对象数组
            File[] list = file.listFiles();
            // 遍历file数组
            for (int i = 0; i < list.length; i++) {
                File fileN = list[i];
                if (fileN.isDirectory()) {
                    //打印文件与文件直接的空白
                    String printTab = "";
                    for (int j = 1; j <= fileLevel; j++) {
                        printTab = printTab + "\t|";
                    }
                    System.out.println(printTab);
    
                    String printStr = this.createPrintStr(fileN.getName(), fileLevel, true);
                    System.out.println(printStr);
                    fileLevel++;
                    // 递归子目录
                    this.readFile(fileN.getPath());
                    fileLevel--;
                } else {
                    //打印文件与文件直接的空白
                    String printTab = "";
                    for (int j = 1; j <= fileLevel; j++) {
                        printTab = printTab + "\t|";
                    }
                    System.out.println(printTab);
                    String printStr = this.createPrintStr(fileN.getName(), fileLevel, false);
                    System.out.println(printStr);
                }
            }
        }
    
        public static void main(String[] args) {
            PrintDirTree rd = new PrintDirTree();
            String dirPath = "C:\\tmp\\";
            rd.printDir(dirPath);
            rd.readFile(dirPath);
        }
    }
    
    
    演示目录结构如下
    image-20221228170040657
    执行结果如下
     C:\tmp\
        |
        +———+[fileupload]
        |   |
        |   +—— temp.avl
        |
        +———+[logs]
        |   |
        |   +———+[error]
        |   |   |
        |   |   +—— log-error-2020-2-2.0.log
        |   |   |
        |   |   +—— log-error-2020-2-3.0.log
        |   |
        |   +———+[info]
        |   |   |
        |   |   +—— 123456.info
        |   |   |
        |   |   +—— 234567.info
        |   |
        |   +—— log_debug.log
        |   |
        |   +—— log_error.log
        |   |
        |   +—— log_error.log.bak
        |   |
        |   +—— log_info.log
        |   |
        |   +—— log_warn.log
        |   |
        |   +—— time
        |   |
        |   +———+[warn]
        |   |   |
        |   |   +—— log-warn-2020-2-1.0.log
        |   |   |
        |   |   +—— log-warn-2020-2-2.0.log
    
    Process finished with exit code 0
    
    

    原文转自:
    https://blog.csdn.net/gangwazi0525/article/details/7569701

    相关文章

      网友评论

          本文标题:Java遍历目录文件并打印文件结构树

          本文链接:https://www.haomeiwen.com/subject/iozoqdtx.html