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

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


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);
		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");
  • 结果展示
  •  

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值