构建目录树

时间:2009-12-11 13:23:45

标签: clojure

我正在尝试构建一个目录树,例如如何表示xml树,以向量的形式,我可以使用以下代码段遍历文件系统,但我无法理解如何构建一个树结构出来了吗?


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

2 个答案:

答案 0 :(得分:8)

我也不是很擅长这个,但是......

您是否知道已有“内置”功能将目录树转换为序列?

请参阅http://richhickey.github.com/clojure/clojure.core-api.html#clojure.core/file-seq

也许这会满足您的需求。否则,我们将等到真正聪明的Clojurians出现。

答案 1 :(得分: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更合适。