递归
概述
- 递归:指的是当前方法调用自己的一种现象
-
递归的分类
-
- 递归分为两类:直接递归和间接递归
- 直接递归: 称为方法自身调用自己的情况
- 间接递归: 可以归结为: 方法A调用了方法B,方法B调用了方法C,方法C调用了方法A
-
-
注意事项:
- 递归一定要有边界条件(条件限定) , 保证递归能够停下来,否则会发生栈内存溢出.
- 在递归放纵虽然有限定条件,但是递归的次数也不能太多,否则也会发生栈内存溢出现象
- 构造方法禁止递归
使用递归打印多级目录
public static void main(String[] args) { // 找到Hello文件的路径 File file = new File("C:\Users\admin\Desktop\Hello"); //调用getAllFiles() getAllFiles(file); } /* 定义一个方法,参数传递File类型的目录 方法中要对目录进行遍历 */ public static void getAllFiles(File file) { // 表明file此时是一个目录 System.out.println(file); //首先先获取到它直接子目录和直接子文件 File[] files = file.listFiles(); // 遍历files目录 for (File f : files) { // 判断如果得到的f是一个目录,需要再次遍历 if (f.isDirectory()) { // 表明f是一个目录,则继续遍历这个目录 //getAllFiles方法就是获取所有的文件,参数传递的刚好是目录。所以直接调用getAllFiles:递归(自己调用自己) getAllFiles(f); } else { // 此时f不是一个目录,肯定是一个文件 System.out.println(f); } } }
文件过滤器优化
java.io.FileFilter是一个接口,是File的过滤器,该接口的对象可以传递给File类的listFiles(File Filter) 作为参数,接口中只有有个方法:
boolean accept(File pathname) : 测试pathname是否应该包含在当前的File目录中,
如果符合,返回true.