gpt4 book ai didi

jar - clojure:解压缩作为资源存储的 zip 文件

转载 作者:行者123 更新时间:2023-12-04 14:32:33 25 4
gpt4 key购买 nike

我一直在努力读取 lein 项目中资源目录的内容。我现在明白了(在做错了一段时间之后)使用 clojure.java.io/resource 来拉出一个资源,因为当它被打包成一个 jar 时,仅仅使用文件系统是行不通的:

> (require '[clojure.java.io :as io])
> (def zipzip (.openStream (io/resource "zip.zip")))

这将返回 BufferedInputStream .我想要做的是将这个 zip 文件解压到本地目录。我无法制作 ZipFile用它,但我可以做一个 ZipInputStream .不幸的是,虽然我可以得到 ZipEntries为此,我需要一个 ZipFile实际阅读 ZipEntry的内容.我可以做这个:
> (-> zipzip ZipInputStream. .getNextEntry .getName)

这将返回名称,但 api 文档中没有任何内容可以获取该 ZipEntry 的实际内容。与 ZipInputStream !

我如何写出此内容 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"

关于jar - clojure:解压缩作为资源存储的 zip 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10188063/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com