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");
    }
}
相關文章
相關標籤/搜索