में दाखिल करने के लिए ज़िप फ़ाइल लिख रहा ज़िप करने के लिए एक विधि है:Clojure
(defn zip-project [project-id notebooks files]
(with-open [out (ByteArrayOutputStream.)
zip (ZipOutputStream. out)]
(doseq [nb notebooks]
(.putNextEntry zip (ZipEntry. (str "Notebooks/" (:notebook/name nb) ".bkr")))
(let [nb-json (:notebook/contents nb)
bytes (.getBytes nb-json)]
(.write zip bytes))
(.closeEntry zip))
(doseq [{:keys [name content]} files]
(.putNextEntry zip (ZipEntry. (str "Files/" name)))
(io/copy content zip)
(.closeEntry zip))
(.finish zip)
(.toByteArray out)))
के बाद मैं एक ज़िप मैं इसे /tmp/sample/sample.zip की तरह फ़ाइल कुछ में सहेजना चाहते हैं, लेकिन मैं इसे बनाने के लिए प्रतीत नहीं कर सकते हैं। यह कहना है कि ज़िप फ़ाइल खाली है,
(defn create-file! [path zip]
(let [f (io/file path)]
(io/make-parents f)
(io/copy zip f)
true))
समस्या है जब मैं टर्मिनल से unzip चलाने के लिए और अगर मैं इसे आर्काइव सुविधा का उपयोग अनज़िप यह cpgz विस्तार के साथ निकालता है: यहाँ मैं क्या कर रहा हूँ है।
मैं यहाँ क्या गलत कर रहा हूं?
मेरे कूबड़ समस्या यह है कि यह है कि आप .toByteArray बाहर फोन '(है) (। toByteArray out) ''ओपन-ओपन' के अंदर 'कुछ बाइट्स अभी भी ZipOutpu में unflushed हो सकता है tStream। तो आप बल्कि '(.toyteArray (खुले [...] ... बाहर) के लिए प्रतिक्रिया देंगे) '। – cgrand
जब मैं '(create-file! "/tmp/sample/sample.zip चलाता हूं" (ज़िप-प्रोजेक्ट 1 [{: नोटबुक/नाम "हैलो": नोटबुक/सामग्री "yadada"}] [{: name "name" : सामग्री "सामग्री"}])) 'फ़ाइल'/tmp/sample/sample.zip' बनाई गई है। जब मैं इसे अनजिप करता हूं तो मुझे सामग्री के रूप में "yadada" फ़ाइल के साथ 'Hello.bkr' फ़ाइल' के साथ एक फ़ोल्डर 'नोटबुक' दिखाई देता है। तो उन डमी मूल्यों के लिए यह मेरी मशीन पर ठीक काम करता है। आप 'नोटबुक' और 'फाइल' क्या करते हैं जो आप 'ज़िप-प्रोजेक्ट' पर जाते हैं? क्या आप उन्हें प्रश्न में जोड़ सकते हैं? –