博客信息

IO流之File类(递归)

发布时间:『 2019-06-12 10:31』  博客类别:java基础  阅读(649)

目录下所有文件-递归

列出指定目录下文件或者文件夹,包含子目录中的内容;

也就是列出指定目录下所有内容;

 

因为目录中还有目录,只要使用同一个列出目录功能的函数完成即可,

在列出过程中出现的还是目录的话,还可以再次调用本功能;

也就是函数自身调用自身;

这种表现形式,或者编程手法,称为递归;

 

递归要注意:

1、限定条件;

2、要注意递归的次数,尽量避免内存溢出;

 

举两个列子:

1、十进制转二进制其实就用到了递归的思想,十进制不断的模2,只要余数不为0,2的动作就不会停止,这本身就用到了递归的思想;

2、1+2+3+4+5+6+......求和运算也用到了递归的思想,第n个数+n-1)个数之前的和得到的就是n个数的和,第n-1个数+n-2)个数之前的和得到的就是n-1个数的和;这也是递归思想的应用;

 

图解使用递归十进制转二进制

小李飞刀_IO流


图解求和运算递归


小李飞刀_IO流



文件夹列表带层次的递归


package com.javaxl.io.file;

import java.io.File;

/**
 * @author 小李飞刀
 * @site www.javaxl.com
 * @company
 * @create  2019-06-12 21:07
 */
public class FileRecursionDemo {
    public static void main(String[] args) {
        File file = new File("E:\\2018_y2_讲课\\t216");
        list(file,0);
    }

    /**
     * 给目录结构增加层次感
     * @param level
     * @return
     */
    public static String getLevel(int level){
        StringBuilder sb = new StringBuilder("|--");
        for (int i = 0; i < level; i++) {
            sb.insert(0,"|  ");
        }
        return sb.toString();
    }

    /**
     * 递归查询出指定目录file下的所有子目录
     * f.getName拿到的是文件的文件名
     * 直接打印f:拿到的就是文件的全路径名
     * @param file
     * @param level
     */
    public static void list(File file,int level){
        File[] files = file.listFiles();
        System.out.println(getLevel(level)+file.getName());
        level++;
        for (File f : files) {
            if(f.isDirectory()){
                list(f,level);
            }else {
                System.out.println(getLevel(level)+f.getName());
            }
        }
    }
}


控制台结果如下(部分截图)


小李飞刀_IO流






关键字:     Java基础       IO流       File类       递归  

备案号:湘ICP备19000029号

Copyright © 2018-2019 javaxl晓码阁 版权所有