代码之家  ›  专栏  ›  技术社区  ›  Hamza Yerlikaya

构建目录树

  •  4
  • Hamza Yerlikaya  · 技术社区  · 16 年前

    我正在尝试构建一个目录树,比如xml树是如何表示的,以向量的形式,我可以使用下面的代码片段很好地遍历文件系统,但我无法思考如何用它构建树结构?

    
    (defn trav [dir]
      (if (.isDirectory dir)
        (do
          (println (.getName dir))
          (doseq [file (.listFiles dir)]
            (if (.isDirectory file)
              (trav file)))      
          )))
    
    2 回复  |  直到 16 年前
        1
  •  5
  •   kotarak    16 年前

    这个怎么样?

    (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 这更合适。

        2
  •  8
  •   Carl Smotricz    16 年前

    您是否知道已经有一个“内置”函数可以将目录树转换为序列?

    看见 http://richhickey.github.com/clojure/clojure.core-api.html#clojure.core/file-seq

    也许这能满足你的需要。否则,我们只能等到真正聪明的Clojurians出现。

    推荐文章