2009-12-11 110 views
4

我想建立一個目錄樹,如如何表示xml樹,以矢量的形式,我可以遍歷文件系統使用以下片段罰款,但我不能把我的頭如何構建一個樹形結構?建立目錄樹


(defn trav [dir] 
    (if (.isDirectory dir) 
    (do 
     (println (.getName dir)) 
     (doseq [file (.listFiles dir)] 
     (if (.isDirectory file) 
      (trav file)))  
    ))) 

回答

5

這個怎麼樣?

(defstruct file :file) 
(defstruct dir :file :contents) 

(defn file-tree 
    [#^File file] 
    (if (.isDirectory file) 
    (struct dir file (vec (map file-tree (.listFiles file)))) 
    (struct file file)))

如果查詢生成的地圖爲:file你得到這個節點後面的文件項。如果您要求:contents並獲得nil,則它是一個文件。一個向量表示一個目錄。

正如卡爾所說:也許file-seq更合適。