Java IO(二)------递归

递归,指在当前方法内调用本身的这种现象java

 

递归分为两种,直接递归和间接递归。ui

 

直接递归称为方法自身调用本身。间接递归能够A方法调用B方法,B方法调用C方法,C方法调用A方法。spa

 

递归的代码演示,计算1-n之间的和,使用递归完成code

 

public class DiGuiDemo {
    public static void main(String[] args) {
        //计算1~num的和,使用递归完成
        int n = 5;
        int sum = getSum(n);
        System.out.println(sum);
        
    }
    public static int getSum(int n) {
        if(n == 1){
            return 1;
        }
        return n + getSum(n-1);
    }
}

注意:递归必定要有条件限定,保证递归可以中止下来,不然会发生栈内存溢出。对象

在递归中虽然有限定条件,可是递归次数不能太多。不然也会发生栈内存溢出blog

 

递归打印全部子目录中的文件路径

 

编写一个方法用来打印指定目录中的文件路径,并进行方法的调用继承

 

要求:若指定的目录有子目录,那么把子目录中的文件路径也打印出来递归

 

步骤:接口

 

1. 指定要打印的目录File对象内存

 

2. 调用getFileAll()方法

 

2.1 获取指定目录中的全部File对象

 

2.2 遍历获得每个File对象

 

2.3 判断当前File 对象是不是目录

 

判断结果为true,说明为目录,经过递归,再次调用步骤2getFileAll()方法

 

判断结果为false,说明是文件,打印文件的路径

 

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文件(含子目录)

需求:打印指定目录即全部子目录中的.java文件的文件路径

要求:编写一个方法用来打印指定目录中的.java文件路径,并进行方法的调用

若指定的目录有子目录,那么把子目录中的.java文件路径也打印出来

步骤:

1. 指定要打印的目录File对象

2. 调用getFileAll()方法,传入要打印的目录File对象

2.1 经过FilenameFilter过滤器获取指定目录中的全部.java类型的File对象

2.2 遍历获得每个File对象

2.3 判断当前File 对象是不是目录

判断结果为true,说明为目录,经过递归,再次调用步骤2getFileAll()方法

判断结果为false,说明是文件,打印文件的路径

 

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过滤器接口
//定义类实现文件名称FilenameFilter过滤器
class MyFileFilter implements FilenameFilter{
    public boolean accept(File dir, String name) {
        return name.endsWith(".java");
    }
}
相关文章
相关标签/搜索