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
网友评论