2010-07-06 24 views
6

Tôi gọi hàm java trong Clojure để nhận danh sách tệp.Một cách để tách các giá trị trả lại từ java.io.File.listFiles trong Clojure

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

Và tôi nhận được một bó toàn bộ chuỗi như thế này

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

vv Làm thế nào để loại bỏ các dấu ngoặc và đặt chúng trong một số hình thức của một mảng nên chức năng khác có thể truy cập vào nó?

Trả lời

7

Các chuỗi đó chỉ là định dạng in cho đối tượng Java File.

Xem File javadoc để có sẵn các hoạt động.

Nếu bạn muốn các đường dẫn tập tin như dây đàn, nó sẽ là một cái gì đó giống như

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

Hoặc bạn chỉ có thể sử dụng list, mà trả về chuỗi ở nơi đầu tiên:

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

Nếu bạn muốn để đọc tệp, bạn cũng có thể giữ tệp dưới dạng đối tượng Tệp để chuyển vào lõi slurp hoặc các hàm clojure.java.io hoặc clojure.contrib.duck-streams khác.

+0

Tôi có thể chuyển đối tượng Tệp để ẩn như sau: (slurp (first (.listFiles (io/file "/ home/loluser/loldir")))) hoặc có thể đặt nó vào var trước rồi làm slurp của var? – bleakgadfly

+0

Có. Mặc dù listFiles trả về cả hai tệp và thư mục, vì vậy bạn có thể muốn lọc trước bằng # (. IsFile%). –

+0

Là một sang một bên, lưu ý cú pháp làm nổi bật cú pháp. – Svante

Các vấn đề liên quan