在 Clojure 中列出目录中的文件

2022-08-31 15:16:50

如何从Clojure中特定目录中的所有文件创建一个列表?我是否必须求助于调用Java,或者Clojure是否可以在本地处理这个问题?


答案 1

使用 file-seq 函数。

用法示例:

(def directory (clojure.java.io/file "/path/to/directory"))
(def files (file-seq directory))
(take 10 files)

答案 2

Clojure旨在拥抱Java平台,这是Clojure不提供自己的API的一个领域。这意味着你可能不得不深入研究Java,但是你必须使用的类可以直接从Clojure中使用。

在 javadocs 中应该阅读的一个类是 ,它表示一个文件路径java.io.File

http://docs.oracle.com/javase/6/docs/api/java/io/File.html

实例方法返回一个对象数组(可用作 seq)– 实例标识的目录中的每个条目对应一个数组。还有其他有用的方法可用于确定 是否存在、是否为目录等。.listFilesFileFileFile

(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 提供了一个有用的帮助程序函数:。作为其参数,它接受路径段作为字符串或文件。这些段与平台的正确路径分隔符连接。Fileclojure.java.io/file

http://clojuredocs.org/clojure_core/clojure.java.io/file

注意:Clojure还提供了一个函数,该函数通过从给定文件开始的文件层次结构返回预排序浏览(作为seq)。file-seq


推荐