2010-07-06 8 views
6

में java.io.File.listFiles से लौटाए गए मानों को पट्टी करने का एक तरीका मैं फ़ाइलों की सूची प्राप्त करने के लिए क्लोजर में जावा फ़ंक्शन को कॉल करता हूं।क्लोजर

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

और मैं इन

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

आदि है मैं कैसे कोष्ठक से छुटकारा और उन्हें एक सरणी के कुछ फार्म में डाल तो एक और समारोह उस तक पहुँच सकते हो की तरह तार की एक पूरी गुच्छा मिल सकता है?

उत्तर

7

वे तार जावा File ऑब्जेक्ट के लिए प्रिंट प्रारूप हैं।

File javadoc देखें जिसके लिए संचालन उपलब्ध हैं।

आप तारों के रूप में फ़ाइल पथ चाहते हैं, ऐसा लगता है जैसे

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

कुछ होगा या फिर आप जो पहली जगह में तार रिटर्न list इस्तेमाल कर सकते हैं,:

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

यदि आप चाहते हैं फ़ाइल को पढ़ने के लिए, आप इसे कोर slurp या अन्य clojure.java.io या clojure.contrib.duck-streams फ़ंक्शंस में पास करने के लिए फ़ाइल ऑब्जेक्ट के रूप में भी रख सकते हैं।

+0

क्या मैं फ़ाइल ऑब्जेक्ट को इस तरह स्लर्प करने के लिए पास कर सकता हूं: (स्लर्प (पहला (.listFiles (io/file "/ home/loluser/loldir"))) या शायद इसे पहले एक var में डाल दें और फिर एक स्लर्प करें var के? – bleakgadfly

+0

हां। हालांकि listFiles दोनों फाइलों और निर्देशिकाओं को लौटाता है, तो आप शायद पहले # (। IsFile%) के साथ फ़िल्टर करना चाहते हैं। –

+0

एक तरफ के रूप में, उलझन में सिंटैक्स हाइलाइटिंग नोट करें। – Svante