当前位置: 首页 > 面试题库 >

从ResourceStream提取压缩文件会引发错误“无效的存储块长度”

吴举
2023-03-14
问题内容

我正在尝试使用以下方法从当前的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>

但是我没有直接听保罗的回答,相反,我不认为这些xlsx文件应该经过资源插件的过滤管道,因此我resource在pom中添加了另一个文件:

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

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



 类似资料:
  • 我正在尝试将位于azure datalake中的csv压缩为zip。该操作是使用datricks中的python代码完成的,我在其中创建了一个挂载点以将dbfs与datalake直接关联。 这是我的代码: 但是我收到了这个错误: 有什么办法吗? 提前感谢。

  • 我试图从java调用python文件。但它会抛出以下错误。 我尝试过的代码是: 可能是什么问题?

  • 我正在使用Julia的ZipFile包来提取和处理csv文件。没问题,但是当我遇到zip文件中的zip文件时,我也想处理它,但是遇到了一个错误。 Julia ZipFile文档如下:https://zipfilejl.readthedocs.io/en/latest/ 对如何做到这一点有什么想法吗?

  • 主要内容:对称矩阵,上(下)三角矩阵,稀疏矩阵,矩阵压缩存储的 3 种方式数据结构中,提供针对某些特殊矩阵的压缩存储结构。 这里所说的特殊矩阵,主要分为以下两类: 含有大量相同数据元素的矩阵,比如对称矩阵; 含有大量 0 元素的矩阵,比如稀疏矩阵、上(下)三角矩阵; 针对以上两类矩阵,数据结构的压缩存储思想是:矩阵中的相同数据元素(包括元素 0)只存储一个。 对称矩阵 图 1 对称矩阵示意图 图 1 的矩阵中,数据元素沿主对角线对应相等,这类矩阵称为 对称矩阵。 矩阵中

  • 关于师父的解释: 关于奴隶的解释: 贷款-l 查询执行时间长。

  • 我得到无效的zip,当写入文件以下代码: 我将其写入文件的方式是: 我做错了什么?