2010-07-06 20 views
6

Llamo a una función java en Clojure para obtener una lista de archivos.Una forma de quitar valores devueltos de java.io.File.listFiles en Clojure

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

Y consigo un montón de cuerdas como estos

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

etc. ¿Cómo me deshago de los soportes y las puse en una cierta forma de una matriz por lo que otra función se puede acceder a él?

Respuesta

7

Esas cadenas son solo el formato de impresión para un objeto Java File.

Consulte el File javadoc para el que hay operaciones disponibles.

Si desea que las rutas de archivos como cadenas, sería algo así como

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

O simplemente podría utilizar list, que devuelve cadenas en el primer lugar:

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

Si quieren para leer el archivo, también puede mantenerlo como un objeto File para pasar al núcleo slurp u otras funciones clojure.java.io o clojure.contrib.duck-streams.

+0

Podría pasar el objeto File para sorber de esta manera: (sorber (primero (.listFiles (io/file "/ home/loluser/loldir")))) o tal vez ponerlo en una var primero y luego hacer un sorbo de la var? – bleakgadfly

+0

Sí. Aunque listFiles devuelve ambos archivos y directorios, entonces probablemente quiera filtrar con # (. IsFile%) primero. –

+0

Como un aparte, tenga en cuenta el resaltado de sintaxis mutilado. – Svante

Cuestiones relacionadas