gpt4 book ai didi

java - 如何从内存中的zip中提取文件?

转载 作者:行者123 更新时间:2023-12-01 11:55:19 24 4
gpt4 key购买 nike

我想从内存中的列表中提取所有文件,并将它们放在一个列表中,其中每个元素都包含 zip 包含的文件之一:

    List<Resource> extracted = new ArrayList<>();
UrlResource url = new UrlResource("http://path.to.file.zip");
ZipInputStream stream = new ZipInputStream(url.getInputStream());
ZipEntry zipEntry;
while((zipEntry = stream.getNextEntry()) != null) {
extracted.add(new InputStreamResource(stream, zipEntry.getName()));
}

extracted 列表将包含多个 InputStreamResources,每个都对应 zip 压缩存档中包含的一个文件。这样就可以了。

问题:资源中 ZipInputStream 的每个 entry/ZipEntry 字段均为 null!

((ZipInputStream) extracted.get(0).getInputStream()).getNextEntry(); // == null for all entries!

最佳答案

每个 ZipEntry 仅在调用 getNextEntry() 之前保持有效。您必须在调用 getNextEntry() 之前提取它。

不幸的是,它没有明确记录它的行为方式,我不得不猜测(因为流意味着您只能看到所有数据一次)并且查看 getNextEntry() 的源代码表明前一个条目在 getNextEntry 中关闭()。

最好的办法是提取循环中的条目并围绕 byte[] (或类似的东西)构建资源。

关于java - 如何从内存中的zip中提取文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28500394/

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