按目录层级打印指定路径下的所有文件名

需求:传入文件路径(目录),打印该路径(目录)下所有文件名,要求含目录层次关系


1、File类的方法回顾

  •  boolean isDirectory()    // 判断File是否为目录
  •  boolean isFile()   // 判断是否为文件
  •  boolean exists()  // 判断文件是否存在
  •  boolean delete()   // 删除文件,成功则返回true,否则false
  •  String getName()  // 返回包含这个File对象的文件名的字符串,但不包含路径信息
  •  String getPath()  // 返回定义File时的路径
  •  String getAbsolutePath()  // 得到的是绝对路径,但不会处理“.”和“..”的情况
  •  String getCanonicalPath()  // 返回包含这个文件的规范路径名的字符串,该方法会使用恰当的目录分隔符,并可以获得底层文件系统所选择的大小写处理方式,详见Google、百度用法
  •  String[] list()  // 返回某个目录下的所有文件和目录的文件名,返回的是String数组
  •  File[] listFiles()  // 返回某个目录下所有文件和目录的绝对路径,返回的是File数组
  •  其他详见File类相关API

2、思路梳理

  • 1,参数检验:判断该文件或目录是否存在,不存在时在控制台输出提醒或报错
  • 2,判断指定路径是否为文件,若为文件则输出文件名
  • 3,若为目录则获取当前目录下的所有文件名与目录名的File数组
  • 4,遍历该数组元素:若元素为文件,则直接输出文件名;若为子目录,则在输出子目录名后,获取子目录对应的File数组,此过程需用递归,并加深遍历搜索深度
  • 5,缩进层次的定义:定义"|---"为层次缩进,且初始缩进层次为1(即tab=1),每进入一次递归方法就将缩进层次加1;
  • 6,在打印文件名之前需打印当前的缩进层次,该缩进层次随当前递归的深度而不同,故调用for循环打印"|---",该循环次数即为tab的大小

3、代码

  • 编写打印文件名工具类
public class PrintFileNameUtil {
        
	private int tab = 1;

	/**
	 * 打印文件名主方法
	 * @param path 传参
	 */
	public void printFileName(String path){
		try {
			paramTest(path);
		} catch (IOException e) {
			e.printStackTrace();
		}
		iteratorPrint(path,tab);
	}

	/**
	 * 参数检验
	 * @param path 输入参数--路径
	 * @throws IOException IO异常
	 */
	private void paramTest(String path) throws IOException{
		File dir = new File(path);
		if (!dir.exists()){
			System.out.println(String.format("文件路径错误!---> %s",path));
			throw new IOException();
		}
	}

	/**
	 * 递归打印
	 * @param path 路径
	 * @param tab 递归层次
	 */
	private void iteratorPrint(String path,int tab) {
		File file = new File(path);
		if (file.isFile()) {
			System.out.println("|---"+file.getName());
		} else {
			File[] subDir = file.listFiles();
			for (File subDirFile:subDir) {
				for (int j = 0; j < tab; j++) {
					System.out.print("|---");
				}
				System.out.println(subDirFile.getName());
				if (subDirFile.isDirectory()) {
					iteratorPrint(subDirFile.getAbsolutePath(),tab+1);
				}
			}
		}
	}
}
  • 测试

    

PrintFileNameUtil util = new PrintFileNameUtil();
util.printFileName("your dir");
  • 结果展示
  • 按目录层级打印指定路径下的所有文件名