java遍歷給定目錄,樹形結構輸出所有文件,包括子目錄中的文件

遍歷文件目錄,需要進行遞歸輸出子目錄中的文件。遍歷目錄,判斷是否是文件比較簡單,主要是輸出格式的控制。這裏採用一個fileLevel來表示文件的層數,用於輸出時的縮進

import java.io.File;

public class ReadDirectory {
        // 文件所在的層數
        private int fileLevel;

        /**
         * 生成輸出格式
         * @param name 輸出的文件名或目錄名
         * @param level 輸出的文件名或者目錄名所在的層次
         * @return 輸出的字符串
         */
        public String createPrintStr(String name, int level) {
                // 輸出的前綴
                String printStr = "";
                // 按層次進行縮進
                for (int i = 0; i < level; i ++) {
                        printStr  = printStr + "  ";
                }
                printStr = printStr + "- " + name;
                return printStr;
        }

        /**
         * 輸出初始給定的目錄
         * @param dirPath 給定的目錄
         */
        public void printDir(String dirPath){
                // 將給定的目錄進行分割
                String[] dirNameList = dirPath.split("\\\\");
                // 設定文件level的base
                fileLevel = dirNameList.length;
                // 按格式輸出
                for (int i = 0; i < dirNameList.length; i ++) {
                        System.out.println(createPrintStr(dirNameList[i], i));
                }
        }

        /**
         * 輸出給定目錄下的文件,包括子目錄中的文件
         * @param dirPath 給定的目錄
         */
        public void readFile(String dirPath) {
                // 建立當前目錄中文件的File對象
                File file = new File(dirPath);
                // 取得代表目錄中所有文件的File對象數組
                File[] list = file.listFiles();
                // 遍歷file數組
                for (int i = 0; i < list.length; i++) {
                        if (list.isDirectory()) {
                                System.out.println(createPrintStr(list.getName(), fileLevel));
                                fileLevel ++;
                                // 遞歸子目錄
                                readFile(list.getPath());
                                fileLevel --;
                        } else {
                                System.out.println(createPrintStr(list.getName(), fileLevel));
                        }
                }
        }
        
        public static void main(String[] args) {
                ReadDirectory rd = new ReadDirectory();
                String dirPath = "D:\\有道詞典";
                rd.printDir(dirPath);
                rd.readFile(dirPath);
        }
}

輸出結果如下:





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