递归打印文件树
使用递归算法打印文件树形结构
思想:使用一个静态变量用于记录文件遍历的深度,然后使用一个静态集合容器装入每次迭代前的需要在路径名前输出的树形特殊结构,最后开始遍历文件数组,先判断该文件路径是不是最后一个路径名,如果不是就使用迭代持续迭代遍历,非路径的先判断其是不是最后一个文件,根据结果的的不同选择输出不同的文件树形结构
实现代码:
package com.filepath;
import java.io.File;
import java.util.LinkedList;
public class FilePathTest02 {
//用于记录文件路径深度
public static int pathDeep=0;
private static LinkedList<String> fileList=new LinkedList<String>();
//文件路径打印
public void printFilePath(File file) {
//判断当前文件或路径是否存在
if(file.exists()) {
//生成一个文件数组
File[] fileArr=file.listFiles();
pathDeep++;
// 遍历每行时,将其分成两部分:行首和File部分。
// 其中File部分要先判断是目录还是文件,再判断是否是当前目录最后的一个File,在Filename前打印出相应的符号
for(File f:fileArr) {
// 输出行首
for(int i=0;i<pathDeep-1;i++) {
System.out.print(fileList.get(i));
}
//判断当前文件是否是路径
if(f.isDirectory()) {
//判断是不是最后一个目录
if(fileArr[fileArr.length-1].equals(f)) {
//是最后一个目录时
System.out.print("└─");
fileList.add(pathDeep-1," ");
}else {
//非最后一个目录时
fileList.add(pathDeep-1,"│ ");
System.out.print("├─");
}
//输出此时目录的名字
System.out.println(f.getName());
//递归遍历
printFilePath(f);
//如果不是目录而是文件
}else {
//先判断当前文件是不是最后一个文件
if(fileArr[fileArr.length-1].equals(f)) {
System.out.print("└─");
}else {
System.out.print("├─");
}
System.out.println(f.getName());
}
}
}else {
System.out.println("文件或路径不存在...");
}
pathDeep--;
}
public static void main(String[] args) {
File file=new File("E:\\0610课件与开发软件");
System.out.println(file.getName());
new FilePathTest02().printFilePath(file);
}
}