gpt4 book ai didi

java - 从 ResourceStream 中提取压缩文件会引发错误 "Invalid stored block lengths"

转载 作者:搜寻专家 更新时间:2023-10-30 21:25:39 24 4
gpt4 key购买 nike

我正在尝试使用以下方法从我当前的 JAR 中提取一个 ZIP 文件:

InputStream resource = getClass().getClassLoader().getResourceAsStream(name);

这得到正确的InputStream ,但是当我尝试使用以下代码解压缩它时出现错误(我将每个文件存储到 Hashmap<file, filename> 中):

public static HashMap<String, String> readZip(InputStream inputStream) throws IOException {
byte[] buffer = new byte[1024];
HashMap<String, String> list = new HashMap<>();
ZipInputStream zipInputStream = new ZipInputStream(inputStream);
ZipEntry entry = zipInputStream.getNextEntry();
while (entry != null) {
if (!entry.isDirectory()) {
StringBuilder stringBuilder = new StringBuilder();
while (IOUtils.read(zipInputStream, buffer) > 0) {
stringBuilder.append(new String(buffer, "UTF-8"));
}
list.put(stringBuilder.toString(), entry.getName());
}
zipInputStream.closeEntry();
entry = zipInputStream.getNextEntry();
}
zipInputStream.closeEntry();
zipInputStream.close();
return list;
}

但是当我尝试这样做时,我得到了这个异常(在 IOUtils.read 上)

java.util.zip.ZipException: invalid stored block lengths
at java.util.zip.InflaterInputStream.read(Unknown Source)
at java.util.zip.ZipInputStream.read(Unknown Source)

我做错了吗?我对错误进行了大量谷歌搜索,但没有发现与我的问题相关的任何内容。

最佳答案

感谢@PaulBGD 上面的回答。它节省了我几个小时来弄清楚我的系统发生了什么我将以下新片段添加到我的 pom.xml 文件中(在阅读 Paul 的回答之前我没有意识到这是根本原因):

<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
<includes>
<include>**/*.version</include>
<include>**/*.properties</include>
<include>**/*.xml</include>
<include>**/*.csv</include>
<include>**/*.txt</include>
<include>**/*.gif</include>
<include>**/*.json</include>
<include>**/*.xlsx</include>
<include>rythm/**</include>
</includes>
</resource>
</resources>

但是我没有直接接受 Paul 的回答,相反我认为那些 xlsx 文件不应该通过资源插件的过滤管道,因此我添加了另一个 resource进入 pom:

  <resource>
<directory>src/main/resources</directory>
<filtering>false</filtering>
<includes>
<include>**/*.xlsx</include>
</includes>
</resource>

它解决了我的问题,没有将源编码设置从 UTF-8 更改为 ISO-8859-1

关于java - 从 ResourceStream 中提取压缩文件会引发错误 "Invalid stored block lengths",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25235229/

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