4
A
回答
12
Java中有一種股票ZipOutputStream
,可以在Clojure中使用。我不知道是否有某個圖書館。我使用普通的Java函數和一個小幫助宏:
(defmacro ^:private with-entry
[zip entry-name & body]
`(let [^ZipOutputStream zip# ~zip]
(.putNextEntry zip# (ZipEntry. ~entry-name))
[email protected]
(flush)
(.closeEntry zip#)))
很明顯,每個ZIP條目都描述了一個文件。
(require '[clojure.java.io :as io])
(with-open [file (io/output-stream "foo.zip")
zip (ZipOutputStream. file)
wrt (io/writer zip)]
(binding [*out* wrt]
(doto zip
(with-entry "foo.txt"
(println "foo"))
(with-entry "bar/baz.txt"
(println "baz")))))
要壓縮你可能想要做一些像這樣的文件:
(with-open [output (ZipOutputStream. (io/output-stream "foo.zip"))
input (io/input-stream "foo")]
(with-entry output "foo"
(io/copy input output)))
2
文件的所有壓縮和解壓可以用一個簡單的shell命令,我們可以通過clojure.java.shell
使用相同的方法,您還可以壓縮和解壓縮通常從終端通常使用的任何壓縮類型。
(use '[clojure.java.shell :only [sh]])
(defn unpack-resources [in out]
(clojure.java.shell/sh
"sh" "-c"
(str " unzip " in " -d " out)))
(defn pack-resources [in out]
(clojure.java.shell/sh
"sh" "-c"
(str " zip " in " -r " out)))
(unpack-resources "/path/to/my/zip/foo.zip"
"/path/to/store/unzipped/files")
(pack-resources "/path/to/store/archive/myZipArchiveName.zip"
"/path/to/my/file/myTextFile.csv")
0
可以導入這個(gzip的)https://gist.github.com/bpsm/1858654 它相當有趣。 或者更確切地說,你可以使用這個
(defn gzip
[input output & opts]
(with-open [output (-> output clojure.java.io/output-stream GZIPOutputStream.)]
(with-open [rdr (clojure.java.io/reader input)]
(doall (apply clojure.java.io/copy rdr output opts)))))
相關問題
- 1. 在yii中壓縮/解壓縮文件
- 2. 在perl中壓縮文件
- 3. 在SSIS中壓縮文件
- 4. 在python中壓縮和解壓縮文本文件
- 5. 壓縮文件
- 6. 批量使用7zip在一個壓縮文件中壓縮更多文件,而不是在更多壓縮文件中壓縮更多文件
- 7. android獲取壓縮文件中的文件的壓縮大小
- 8. bash:在壓縮其他文件時發送壓縮文件
- 9. 壓縮文件未解壓
- 10. Node.js - 壓縮/解壓縮文件夾
- 11. Magick ++壓縮和解壓縮文件
- 12. 壓縮未壓縮的MSI文件
- 13. 與django_compressor壓縮文件以gzip壓縮
- 14. 壓縮和解壓縮文件夾
- 15. 如何壓縮文件時不壓縮
- 16. 壓縮解壓縮的exe文件
- 17. png文件的壓縮和解壓縮
- 18. java-library將文件從壓縮文件中提取/壓縮到壓縮文件中
- 19. 如何在內存中解壓縮GZip壓縮文件?
- 20. 在C#中壓縮和解壓縮文件夾#
- 21. 在java中壓縮和解壓縮7z文件
- 22. 在Adobe Air/Javascript中壓縮和解壓縮文件
- 23. 在c中壓縮和解壓縮多個文件#
- 24. 如何在asp.net框架4.0中壓縮/解壓縮文件夾
- 25. 在Objective-C中解壓縮wav文件(Windows IMA ADPCM壓縮)?
- 26. ASP.Net中的文件壓縮
- 27. 在Windows上解壓壓縮文件8
- 28. 解壓Z01,Z02,壓縮在Python文件
- 29. 在c#中使用zlib壓縮文件時解壓文件
- 30. 如何用Clojure遞歸壓縮文件夾
只是好奇,爲什麼你不想使用Java庫?使用現有的java庫是clojure和其他基於JVM的語言的最大USP之一。爲什麼重新發明輪子? –
我以爲使用現有的圖書館...我不明白你的答案。也許我的英語不好...什麼是USP? – jeremieca
@jeremieca [USP =獨特的銷售主張](http://en.wikipedia.org/wiki/Unique_selling_proposition) – sloth