2009-12-11 78 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更合适。