在 Clojure 中列出目录中的文件
如何从Clojure中特定目录中的所有文件创建一个列表?我是否必须求助于调用Java,或者Clojure是否可以在本地处理这个问题?
如何从Clojure中特定目录中的所有文件创建一个列表?我是否必须求助于调用Java,或者Clojure是否可以在本地处理这个问题?
使用 file-seq
函数。
用法示例:
(def directory (clojure.java.io/file "/path/to/directory"))
(def files (file-seq directory))
(take 10 files)
Clojure旨在拥抱Java平台,这是Clojure不提供自己的API的一个领域。这意味着你可能不得不深入研究Java,但是你必须使用的类可以直接从Clojure中使用。
在 javadocs 中应该阅读的一个类是 ,它表示一个文件路径。java.io.File
http://docs.oracle.com/javase/6/docs/api/java/io/File.html
实例方法返回一个对象数组(可用作 seq)– 实例标识的目录中的每个条目对应一个数组。还有其他有用的方法可用于确定 是否存在、是否为目录等。.listFiles
File
File
File
(ns my-file-utils
(:import java.io.File))
(defn my-ls [d]
(println "Files in " (.getName d))
(doseq [f (.listFiles d)]
(if (.isDirectory f)
(print "d ")
(print "- "))
(println (.getName f))))
;; Usage: (my-ls (File. "."))
的构造函数有时使用起来有点不方便(特别是当一次性合并多个路径段时),在这种情况下,Clojure 提供了一个有用的帮助程序函数:。作为其参数,它接受路径段作为字符串或文件。这些段与平台的正确路径分隔符连接。File
clojure.java.io/file
http://clojuredocs.org/clojure_core/clojure.java.io/file
注意:Clojure还提供了一个函数,该函数通过从给定文件开始的文件层次结构返回预排序浏览(作为seq)。file-seq