java實現遍歷文件目錄,並在控制檯以樹形結構展示搜索出來的文件

最近學會了一個用java遍歷文件目錄,並且在控制檯以樹形結構的方式展開搜索的文件,怕忘記了,所以記錄下來,廢話不再多說,直接上代碼!具體方法,代碼中都有相應的註釋了,這裏就不在重複說明了。若有錯誤,歡迎各位大牛指正!

import java.io.File;

public class Test {
    static int dirs = 0;//定義的變量用於存放統計出來的目錄數量和文件數量
    static int files = 0;
    static long dirLength = 0 ;//定義的變量用於存放統計出來的目錄大小和文件大小
    static long fileLength = 0;
    static String preStr = "";//定義縮進量,用於以樹形結構展現層級
    File f = null;
    Test(File f){
        this.f = f;
    }

    public void tree(File f, int level) {
        /**
         * 由於全局變量在程序銷燬之前,
        變量就會一直保存在內存中,這樣就會導致上一次運算的值保留了下來,
        再次執行方法的時候就會將值累加,
        這樣會導致即使在同一級目錄下的文件也會呈現樹形分級,
        因此,此處要定義一個局部變量,
        每次執行的時候更新相應的全局變量,因爲局部變量在方法每次執行完的時候被銷燬,
        也就是說每次執行該方法的時,這個局部變量都不一定是相同的值,這樣就避免了累加
        */

        String preStr = "";
        this.preStr=preStr;

        for (int i = 0; i < level; i++) {

            //判斷level的層級數,每多一層就添加一個間隔
            preStr +="\t";
        }

        //定義文件數組,用存放獲取到的文件目錄和文件
        File[] childs = f.listFiles();

        for (int i = 0; i < childs.length; i++) {

            //用for 循環一個個取出來
            //childs[i].isDirectory()用於判斷取取出來的file是文件還是目錄,然後執行相應的操作
            if (childs[i].isDirectory()) {

                dirs++;//獲取一個目錄就自加一次,記錄數量           

            }else {

                files++;//獲取一個文件就自加一次,記錄數量
                fileLength=childs[i].length();//該文件的大小(字節數)
                dirLength += childs[i].length();//將獲取到的每個文件的大小(字節數)加起來,記錄整個目錄字節數

            }

            if (!childs[i].isDirectory()) {
                //打印搜索出的文件和目錄,如果是文件就顯示文件字節數

                System.out.println(preStr + childs[i].getName()+"    "+fileLength+"字節");    
            }else{

                System.out.println(preStr + childs[i].getName());
                System.out.println(preStr +"-------------------------");
            }

            if (childs[i].isDirectory()) {
                //判斷是否爲目錄,如果是,再次執行tree()方法,將子目錄裏面的文件再次遍歷出來
                tree(childs[i], level + 1);
            }
        }

    }

    public static void main(String[] args) {

        //給出指定目錄
        File f = new File("D:/網頁設計綜合資料");

        Test t = new Test(f);

        //打印指定目錄,即最頂層目錄
        System.out.println("目標目錄:"+f.getName());

        //開始遍歷目錄
        t.tree(f, 1);
        System.out.println("==============================");
        //打印目錄數量和字節數
        System.out.println("這個目錄中共:"+dirs+"個目錄");
        //打印文件數量和字節數
        System.out.println("這個目錄中有:"+files+"個文件"+"  "+"共"+dirLength+"字節");
        //System.out.println("==============================");
    }




}

以下是運行效果:
代碼運行效果

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章