利用遞迴與字串建構器,即可在控制台輸出層次分明的樹狀目錄結構。以下完整範例展示 Folder 類別設計與繪製邏輯,支援任意深度巢狀節點,並使用 Unicode 盒繪字元(├、│、└)呈現視覺層級。
import java.util.ArrayList;
import java.util.List;
public class Folder {
private String title;
private List children = new ArrayList<>();
public Folder(String title) {
this.title = title;
}
public void addChild(Folder child) {
children.add(child);
}
public List getChildren() {
return children;
}
public String getTitle() {
return title;
}
/**
* 遞迴產生樹狀字串
* @param leftPrefix 左側延伸前綴(如 "│ " 或 " ")
* @param nodePrefix 當前節點前綴("├──" 或 "└──")
*/
public String toTreeString(String leftPrefix, String nodePrefix) {
StringBuilder sb = new StringBuilder();
sb.append(leftPrefix).append(nodePrefix).append(title).append("\n");
if (!children.isEmpty()) {
for (int i = 0; i < children.size() - 1; i++) {
Folder child = children.get(i);
sb.append(child.toTreeString(leftPrefix + "│ ", "├── "));
}
// 最後一個子節點使用└──,左側不再畫豎線
Folder last = children.get(children.size() - 1);
sb.append(last.toTreeString(leftPrefix + " ", "└── "));
}
return sb.toString();
}
public static void main(String[] args) {
Folder root = new Folder("選單列表");
Folder f1 = new Folder("開始選單");
root.addChild(f1);
f1.addChild(new Folder("程式集"));
Folder accessories = new Folder("附屬應用程式");
f1.addChild(accessories);
accessories.addChild(new Folder("娛樂"));
accessories.addChild(new Folder("娛樂2"));
f1.addChild(new Folder("輔助工具"));
root.addChild(new Folder("我的文件"));
root.addChild(new Folder("我的文件2"));
System.out.println(root.toTreeString("", ""));
}
}
執行結果:
選單列表 ├── 開始選單 │ ├── 程式集 │ ├── 附屬應用程式 │ │ ├── 娛樂 │ │ └── 娛樂2 │ └── 輔助工具 ├── 我的文件 └── 我的文件2
核心技巧在於 toTreeString 遞迴時傳遞兩個前綴參數:leftPrefix 控制父層延伸線,nodePrefix 決定當前節點的分支符號。最後一個子節點改用 └── 並將左側延伸線改為空格,即可得到完美對齊的樹狀圖。