深度遍历:递归的应用

/*
*需求:对指定目录进行所有内容的列出(包含子目录中的内容)
*也可以理解为深度遍历
*分析:listFiles方法只会列出当前目录下的所有文件
*但是如果需要访问当前目录下的文件下的文件,
* 那还要对listFiles方法
*进一步操作
*
*/

public class FileTest {
public static void main(String[] args) {
    //1,建立当前文件
    File file = new File("demodir");
    //2,需要进行扩展,用函数封装起来
    enlistAll(file,0);
}
public static void listAll(File file) {
    /*
     * listFiles方法返回一个File对象数组,
     * 将当前目录下所有文件封装成file对象
     * 这样不仅仅局限于对文件名的操作。
     */
    /*
     * 3,分析过程,思考过程
     * 
     */
    /*File[] dir = file.listFiles();
      for(File name:dir){
        if(name.isDirectory()){//判断是否是目录
            //如果是目录,就继续遍历
            File[] dir2 = name.listFiles();
            for(File name2:dir2){
            if(name.isDirectory()){.....};
             * 写到这发现端倪了,如果还是目录还要继续遍历
             * 我们发现,我们再重复调用这个函数,
             * 想到要用到递归!
            }
        }
        //无论是否是目录都要打印出文件名
        System.out.println(name);
    }*/
}
/*
 *重新建立这个函数,加个参数level 用来表示层级关系 
 */
public static void enlistAll(File file,int level) {
    //每调用一次就打印一次这个文件 getspace方法是为了区别层级而设的
    System.out.println(getSpace(level)+file.getName());
    level++;
    File[] dir = file.listFiles();
    for(File name:dir){
        //判断是否是目录,是就重复进行,调用当前函数(递归)
        if(name.isDirectory()){
            enlistAll(name,level);
        }else{
            System.out.println(getSpace(level)+name.getName());
        }

    }

}
public static String getSpace(int level ) {
    StringBuilder sb = new StringBuilder();
    sb.append("|----");
    for(int i = 0;i<level;i++){
        sb.insert(0,"   ");
    }
    return sb.toString();
}}

打印效果

这里写图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值