工具
static Children fileDemo = new Children();
static int index = 0;
public static Children bianLi(String x, int y) {//x为文件名,y为目录等级随便给
try {
//File(String pathname):通过将给定路径名字符串转换为抽象路径名来创建一个新 File 实 例。
File file = new File(x);
//定义一个空字符串
StringBuffer buffer = new StringBuffer("");
//方法:exists():测试此抽象路径名表示的文件或目录是否存在。返回boolean
//方法:isDirectory():测试此抽象路径名表示的文件是否是一个目录。返回boolean
//判断该文件存在并且是目录【是目录才有下一级目录】
//System.out.println(file.getName());
if (file.exists() && file.isDirectory()) {
File[] files = file.listFiles();//将文件的子文件转换为集合的形式
for (int i = 0; i < y; i++) {
//给buffer字符串循环追加"-"(几个 - 表示第几级目录);例如:--DotNetCasClient.dll [2级目录]
buffer.append("-");
}
//子文件存储
ArrayList<Children> fileDemos = new ArrayList<>();
for (int i = 0; i < files.length; i++) {
//判断文件是否为文件夹
if (files[i].isDirectory()) {
Children fileDemo1 = new Children();
fileDemo1.setTitle(files[i].getName());
fileDemo1.setPath(files[i].getAbsolutePath());
fileDemos.add(fileDemo1);
//获取当前文件的父路径
String parent = files[i].getParent();
//判断当前父路径是否是顶级路径
if (parent.equals(fileDemo.getPath())) {
fileDemo.setChildren(fileDemos);
} else {
//递归
addSon(fileDemo, parent, fileDemos);
}
System.out.print(buffer + files[i].getName());//【拼接"-"和文件名称】
System.out.print(" [" + y + "级目录]");
System.out.println(files[i].getAbsolutePath());
System.out.println("");//输出换行
bianLi(files[i].getPath(), y + 1);//调用自己,参数为子文件,目录等级加一;
}
index++;
}
return fileDemo;
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
/**
* 递归找上级目录
* @param children
* @param parent 父类路径
* @param fileDemos 子文件
*/
public static void addSon(Children children, String parent, List<Children> fileDemos) {
//获取子文件
List<Children> childrens = children.getChildren();
for (Children children1 : childrens) {
//判断当前子文件的父路径
if (parent.equals(children1.getPath())) {
children1.setChildren(fileDemos);
} else {
addSon(children1, parent, fileDemos);
}
}
}
实体
@Data
public class Children {
private String title = "ssh";
private String path = "D:\\ssh";
private List<Children> children = new ArrayList<>();
}