Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jar clojure:解压缩存储为资源的zip文件_Jar_Clojure_Zip - Fatal编程技术网

Jar clojure:解压缩存储为资源的zip文件

Jar clojure:解压缩存储为资源的zip文件,jar,clojure,zip,Jar,Clojure,Zip,在我的lein项目中,我一直在努力读取资源目录的内容。我现在理解(在做了一段时间的错误操作之后)使用clojure.java.io/resource来提取资源,因为当文件系统打包为jar时,仅仅使用文件系统是不起作用的: > (require '[clojure.java.io :as io]) > (def zipzip (.openStream (io/resource "zip.zip"))) 这将返回一个BufferedInputStream。我要做的是把这个zip文件解压

在我的lein项目中,我一直在努力读取资源目录的内容。我现在理解(在做了一段时间的错误操作之后)使用clojure.java.io/resource来提取资源,因为当文件系统打包为jar时,仅仅使用文件系统是不起作用的:

> (require '[clojure.java.io :as io])
> (def zipzip (.openStream (io/resource "zip.zip")))
这将返回一个
BufferedInputStream
。我要做的是把这个zip文件解压缩到本地目录。我不能用它制作一个
ZipFile
,但我可以制作一个
ZipInputStream
。不幸的是,虽然我可以从中获得
ZipEntry
,但我需要一个
ZipFile
来实际读取
ZipEntry
的内容。我可以这样做:

> (-> zipzip ZipInputStream. .getNextEntry .getName)
这将返回名称,但api文档中没有任何内容可以通过
ZipInputStream
获取该
ZipEntry
的实际内容


如何将此
ZipInputStream
中的内容写入本地目录?(当代码被打包到jar中时也可以这样做!)

在获得下一个条目后,您只需从
ZipInputStream
中读取即可。使用条目中的大小信息读取内容

user=> (import 'java.util.zip.ZipInputStream)
java.util.zip.ZipInputStream
user=> (def zs (ZipInputStream. (io/input-stream "foo.zip")))
#'user/zs
user=> (def ze (.getNextEntry zs))
#'user/ze
user=> (.getName ze)
"foo.txt"
user=> (.getSize ze)
21
user=> (let [bytes (byte-array 21)] (.read zs bytes 0 21) (String. bytes "UTF-8"))
"Das ist ein Test!\r\n\r\n"