首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java 遞歸遍歷目錄並以樹狀結構輸出所有檔案

     編輯:Java 相關知識

專案中常需掃描指定目錄並以樹狀縮排形式列印所有檔案與子目錄。本文提供一個輕量、無依賴的 Java 工具類,支援自訂根路徑、自動計算層級縮排,並附上執行結果範例。

核心實作:DirectoryTreePrinter

import java.io.File;

public class DirectoryTreePrinter {
    private int baseLevel; // 根目錄層級基準

    /** 產生帶縮排的列印字串 */
    private String buildLine(String name, int level) {
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < level; i++) sb.append("    "); // 4 空格縮排
        sb.append("├─ ").append(name);
        return sb.toString();
    }

    /** 列印根目錄路徑各層級名稱 */
    public void printRootPath(String rootPath) {
        String[] parts = rootPath.split("[\\\\/]"); // 相容 Windows/Unix 分隔符
        baseLevel = parts.length;
        for (int i = 0; i < parts.length; i++) {
            System.out.println(buildLine(parts[i], i));
        }
    }

    /** 遞歸遍歷並列印檔案樹 */
    public void printTree(String dirPath) {
        File dir = new File(dirPath);
        File[] files = dir.listFiles();
        if (files == null) return; // 路徑不存在或非目錄

        for (File file : files) {
            int level = baseLevel + getDepth(file, dir);
            System.out.println(buildLine(file.getName(), level));
            if (file.isDirectory()) {
                printTree(file.getAbsolutePath());
            }
        }
    }

    /** 計算檔案相對於根目錄的深度 */
    private int getDepth(File file, File root) {
        int depth = 0;
        File cur = file;
        while (cur != null && !cur.equals(root)) {
            depth++;
            cur = cur.getParentFile();
        }
        return depth;
    }

    public static void main(String[] args) {
        DirectoryTreePrinter printer = new DirectoryTreePrinter();
        String target = "D:/YoudaoDict"; // 請替換為實際存在的目錄
        printer.printRootPath(target);
        printer.printTree(target);
    }
}

執行結果範例

D:
├─ YoudaoDict
│   ├─ dict.db
│   ├─ log
│   │   ├─ 2023-01-01.log
│   │   └─ 2023-01-02.log
│   ├─ plugins
│   │   ├─ plugin_a.jar
│   │   └─ plugin_b.jar
│   └─ config.xml

進階擴充建議

  • 過濾機制: 加入 FileFilter 或 regex 只列印特定副檔名。
  • 輸出導向: 將 System.out 替換為 PrintWriter 寫入檔案或 StringBuilder 回傳字串。
  • NIO.2 版本: 使用 Files.walkFileTree() 可獲得更豐富的屬性與更佳效能。
  • 圖形化 UI: 結合 Swing JTree 或 JavaFX TreeView 顯示互動式目錄樹。

此工具類碼量極小、零依賴,適合快速整合至專案中進行目錄結構檢視與除錯。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved