一种从Clojure中的java.io.File.listFiles中删除返回值的方法

ble*_*fly 6 lisp java io file clojure

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

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

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

#<File /home/loluser/loldir/lolfile1>
Run Code Online (Sandbox Code Playgroud)

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

j-g*_*tus 7

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

请参阅可用操作的文件javadoc.

如果你想把文件路径作为字符串,那就像是

(map #(.getPath %) 
  (.listFiles (io/file "/home/loluser/loldir")))
Run Code Online (Sandbox Code Playgroud)

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

(.list (io/file "/home/loluser/loldir"))
Run Code Online (Sandbox Code Playgroud)

如果要读取文件,可以将其保存为File对象以传递到核心slurp或其他clojure.java.io或clojure.contrib.duck-streams函数.

  • 当然:`(排序#(.lastModified%)(.listFiles(io/file"/ etc")))`http://richhickey.github.com/clojure/clojure.core-api.html#clojure.核心/排序由 (2认同)