【问题标题】:A way to strip returned values from java.io.File.listFiles in Clojure一种从 Clojure 中的 java.io.File.listFiles 中去除返回值的方法
【发布时间】:2011-03-12 12:33:09
【问题描述】:

我在 Clojure 中调用一个 java 函数来获取文件列表。

(require '[clojure.java.io :as io])
(str (.listFiles (io/file "/home/loluser/loldir")))

我得到一大堆这样的字符串

#<File /home/loluser/loldir/lolfile1>

等等。如何去掉括号并将它们放在某种形式的数组中,以便另一个函数可以访问它?

【问题讨论】:

    标签: java file clojure lisp io


    【解决方案1】:

    这些字符串只是 Java File 对象的打印格式。

    查看File javadoc 可以进行哪些操作。

    如果您希望文件路径为字符串,则类似于

    (map #(.getPath %) 
      (.listFiles (io/file "/home/loluser/loldir")))
    

    或者你可以使用list,它首先返回字符串:

    (.list (io/file "/home/loluser/loldir"))
    

    如果你想读取文件,不妨把它作为一个 File 对象传递给核心 slurp 或其他 clojure.java.io 或 clojure.contrib.duck-streams 函数。

    【讨论】:

    • 我可以像这样将 File 对象传递给 slurp:(slurp (first (.listFiles (io/file "/home/loluser/loldir")))) 或者先将其放入 var然后啜饮 var?
    • 是的。虽然 listFiles 返回文件和目录,但您可能希望先使用 #(.isFile %) 进行过滤。
    • 有没有办法按 lastModified 日期对地图中的文件进行排序?
    • 当然:(sort-by #(.lastModified %) (.listFiles (io/file "/etc"))) richhickey.github.com/clojure/…
    猜你喜欢
    • 1970-01-01
    • 2017-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-24
    • 2014-06-23
    • 1970-01-01
    相关资源
    最近更新 更多