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

2022-12-27  本文已影响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

上一篇下一篇

猜你喜欢

热点阅读