2010-07-06 3 views
6

nenne ich eine Java-Funktion in Clojure zurückgegebenen Werte von java.io.File.listFiles in Clojure abzustreifen eine Liste von Dateien zu erhalten.Ein Weg

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

Und ich bekomme eine ganze Reihe von Zeichenketten wie diese

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

usw. Wie kann ich von den Klammern loszuwerden und sie in irgendeiner Form eines Arrays so kann eine weitere Funktion auf sie zugreifen?

Antwort

7

Diese Strings sind nur das Druckformat für ein Java File Objekt.

Siehe File javadoc für die Operationen zur Verfügung stehen.

Wenn Sie die Dateipfade als Strings wollen, wäre es so etwas wie

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

sein Oder Sie könnten nur list verwenden, die Saiten in erster Linie zurück:

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

Wenn Sie möchten, die Datei zu lesen, könnte man genauso gut hält sie als File-Objekt in die Kern slurp oder anderen clojure.java.io oder clojure.contrib.duck-streams Funktionen zu übergeben.

+0

Konnte ich das File-Objekt so schlürfen: (schlürfen (zuerst (.listFiles (io/file "/ home/loluser/loldir")))) oder vielleicht zuerst in eine var und dann schlürfen der Var? – bleakgadfly

+0

Ja. Obwohl listFiles sowohl Dateien als auch Verzeichnisse zurückgibt, möchten Sie wahrscheinlich zuerst mit # (.isFile%) filtern. –

+0

Als Nebenbemerkung beachten Sie die mangelnde Syntaxhervorhebung. – Svante