列出指定目录下文件或者文件夹,包含子目录中的内容;
也就是列出指定目录下所有内容;
因为目录中还有目录,只要使用同一个列出目录功能的函数完成即可,
在列出过程中出现的还是目录的话,还可以再次调用本功能;
也就是函数自身调用自身;
这种表现形式,或者编程手法,称为递归;
递归要注意:
1、限定条件;
2、要注意递归的次数,尽量避免内存溢出;
举两个列子:
1、十进制转二进制其实就用到了递归的思想,十进制不断的模2,只要余数不为0,模2的动作就不会停止,这本身就用到了递归的思想;
2、1+2+3+4+5+6+......求和运算也用到了递归的思想,第n个数+(n-1)个数之前的和得到的就是n个数的和,第n-1个数+(n-2)个数之前的和得到的就是n-1个数的和;这也是递归思想的应用;
图解使用递归十进制转二进制
图解求和运算递归
文件夹列表带层次的递归
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()); } } } }
控制台结果如下(部分截图)
备案号:湘ICP备19000029号
Copyright © 2018-2019 javaxl晓码阁 版权所有