递归,指在当前方法内调用自己的这种现象
public void method(){ System.out.println(“递归的演示”); //在当前方法内调用自己 method(); }
递归分为两种,直接递归和间接递归。
直接递归称为方法自身调用自己。间接递归可以A方法调用B方法,B方法调用C方法,C方法调用A方法。
递归一定要有条件限定,保证递归能够停止下来,否则会发生栈内存溢出。
在递归中虽然有限定条件,但是递归次数不能太多。否则也会发生栈内存溢出。
递归打印所有子目录中的文件路径
public class FileDemo2 { public static void main(String[] args) { File file = new File("d:\test"); getFileAll(file); } //获取指定目录以及子目录中的所有的文件 public static void getFileAll(File file) { File[] files = file.listFiles(); //遍历当前目录下的所有文件和文件夹 for (File f : files) { //判断当前遍历到的是否为目录 if(f.isDirectory()){ //是目录,继续获取这个目录下的所有文件和文件夹 getFileAll(f); }else{ //不是目录,说明当前f就是文件,那么就打印出来 System.out.println(f); } } } }
搜索指定目录中的.java文件(含子目录)
public class FileDemo4 { public static void main(String[] args) { File file = new File("d:\test"); getFileAll(file); } //获取指定目录以及子目录中的所有的文件 public static void getFileAll(File file) { File[] files = file.listFiles(MyFileFilter()); //遍历当前目录下的所有文件和文件夹 for (File f : files) { //判断当前遍历到的是否为目录 if(f.isDirectory()){ //是目录,继续获取这个目录下的所有文件和文件夹 getFileAll(f); }else{ //不是目录,说明当前f就是文件,那么就打印出来 System.out.println(f); } } } }
//定义类实现文件名称FilenameFilter过滤器 class MyFileFilter implements FilenameFilter{ public boolean accept(File dir, String name) { return name.endsWith(".java"); } }