2010-07-06 5 views
6

Io chiamo una funzione java in Clojure per ottenere un elenco di file.Un modo per rimuovere i valori restituiti da java.io.File.listFiles in Clojure

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

E ho un sacco di stringhe come questi

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

ecc Come faccio a sbarazzarsi delle staffe e metterli in una qualche forma di una matrice in modo da un'altra funzione può accedervi?

risposta

7

Queste stringhe sono solo il formato di stampa per un oggetto Java File.

Vedere lo File javadoc per le quali sono disponibili le operazioni.

Se si desidera che i percorsi dei file come stringhe, sarebbe qualcosa di simile

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

Oppure si potrebbe usare list, che restituisce le stringhe, in primo luogo:

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

Se si desidera per leggere il file, si potrebbe anche tenerlo come oggetto File per passare nel core slurp o altre funzioni clojure.java.io o clojure.contrib.duck-streams.

+0

Potrei passare l'oggetto File a slurp in questo modo: (slurp (first (.listFiles (io/file "/ home/loluser/loldir")))) o forse lo metti prima in una var e poi fai uno slurp della var? – bleakgadfly

+0

Sì. Sebbene listFiles restituisca sia i file che le directory, è consigliabile prima filtrare con # (. IsFile%). –

+0

Come nota a parte, si noti l'evidenziazione della sintassi alterata. – Svante

Problemi correlati