相关疑难解决方法(0)

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

我试图从我当前的JAR中提取ZIP文件:

InputStream resource = getClass().getClassLoader().getResourceAsStream(name);
Run Code Online (Sandbox Code Playgroud)

这是正确的InputStream,但是当我尝试使用以下代码解压缩它时会出错(我将每个文件存储到a中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;
}
Run Code Online (Sandbox Code Playgroud)

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

java.util.zip.ZipException: …
Run Code Online (Sandbox Code Playgroud)

java zip embedded-resource maven

11
推荐指数
2
解决办法
3万
查看次数

标签 统计

embedded-resource ×1

java ×1

maven ×1

zip ×1