从clojure中的目录加载所有文件

时间:2013-12-20 10:51:10

标签: clojure

如何从目录中加载每个clojure文件?

以下代码不起作用,但自己说(“文件夹”在我的src / project目录中)

(load "folder/*")

1 个答案:

答案 0 :(得分:5)

以下函数执行您要查找的内容,根据您描述的方案,似乎没有必要检查依赖项,因此该函数不会执行任何操作,只需将load-file与所提供路径中的所有文件一起使用

(defn load-files [path]
  (let [file  (java.io.File. path)
        files (.listFiles file)]
  (doseq [x files]
    (when (.isFile x)
      (load-file (.getCanonicalPath x))))))

(load-files ".")  

listFiles的文档说不能保证文件的返回顺序,因此可能的改进是提供一个键功能(一个返回完成排序的键的函数)进行排序。

(defn load-files [path f]
  (let [file  (java.io.File. path)
        files (sort-by f (.listFiles file))]
  (doseq [x files]
    (when (.isFile x)
      (load-file (.getCanonicalPath x))))))

(load-files "." #(.getName %))

如果您要加载目录树中的所有文件,则可以按照@edbond的建议使用file-seq

(defn load-files [path f]
  (let [files (->> path java.io.File. file-seq (sort-by f))]
  (doseq [x files]
    (when (.isFile x)
      (load-file (.getCanonicalPath x))))))

(load-files "." #(.getName %))