当前位置: 首页 > 知识库问答 >
问题:

无法解压缩在Java中使用zlib创建的zip文件

籍辰沛
2023-03-14

我试图使用zlib在Java(java.util.zip)压缩文件,但不能解压文件后创建它。我使用下面的代码:

    public static ByteArrayInputStream compress(InputStream inputStream, String targetFilePath) {

        String fileName = new File(targetFilePath).getName();

        try {

            ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
            ZipOutputStream zipOutputStream = new ZipOutputStream(byteArrayOutputStream);
            zipOutputStream.putNextEntry(new ZipEntry(fileName));
            BufferedInputStream bufferedInputStream = new BufferedInputStream(inputStream);

            byte[] buffer = new byte[1000];
            int len;
            while ((len = bufferedInputStream.read(buffer)) > 0) {
                zipOutputStream.write(buffer, 0, len);
            }
            bufferedInputStream.close();
            zipOutputStream.closeEntry();
            return new ByteArrayInputStream(byteArrayOutputStream.toByteArray());

        } catch (IOException ex) {
            log.error("The file does not exist");
        }
        return null;
    }

当我读取一个sample.txt文件,并将其作为InputStream输入到此方法时,它会创建一个sample.zip文件。

但是,当我尝试使用unzip命令打开这个zip文件时,它无法打开,错误如下:

  End-of-central-directory signature not found.  Either this file is not
  a zipfile, or it constitutes one disk of a multi-part archive.  In the
  latter case the central directory and zipfile comment will be found on
  the last disk(s) of this archive.
unzip:  cannot find zipfile directory in one of sample.zip or
        sample.zip.zip, and cannot find sample.zip.ZIP, period.

我尝试使用jarxvf示例打开zip。zip,它起作用并显示包含样本。txt文本文件。这是因为jar命令不会在zip文件中查找中心目录签名的结尾。

有人能解释一下为什么zip文件中没有这个签名吗?在这方面的任何帮助都是非常感谢的。


共有1个答案

扈阳辉
2023-03-14

确保在编写完最后一个条目后关闭ZipOutputStream。这使流有机会完成创建ZIP存档。

 类似资料:
  • 我有一个来自不同位置的文件列表。我使用以下代码创建了一个zip文件,该代码可以正常工作。但是,当我尝试在Windows中使用Extract All解压文件时,无法找到任何字节,但是如果我使用Windows资源管理器双击zip文件本身,我可以看到文件,并且可以打开单个文件并包含正确的数据

  • 问题内容: 我正在尝试解压缩一些zip文件,它的大小约为65兆。下面的代码段: 此方法实际上将文件解压缩: 那个执行者/未来的东西只是为了确保我正确地做。在类Finder中调用此方法,该类在目录中查找zip文件并尝试将其解压缩。它基于此代码http://docs.oracle.com/javase/tutorial/essential/io/walk.html 具体来说: 现在的问题。真的很有趣。

  • 我的要求是解压缩我从Linux平台上的服务器接收的一个zip文件。现在我的应该解压缩文件夹以接收文件。 我在网上进行了研究,发现我可以为此目的使用库,但zlib不能解压缩文件,但它的文件夹中有可用于此目的的。 我从http://www.zlib.net/下载了源文件: 现在转到并尝试编译 我尝试,但得到以下错误:

  • 问题内容: 有人可以向我解释zlib库在Nodejs中如何工作吗? 我对Node.js很陌生,还不确定如何使用缓冲区和流。 我的简单情况是一个字符串变量,我想将字符串压缩或解压缩(压缩或膨胀,gzip或gunzip等)到另一个字符串。 即(我希望它如何工作) 感谢您的帮助:) 问题答案: 更新 :没意识到在节点0.5中有一个新的内置“ zlib”模块。我在下面的答案是针对第三方node- zlib

  • 我创建了一个zip文件使用java zip实用程序,我有以下目录结构内的zip文件。 测试。txt-文件 迈拉贝尔。lbl-文件 aux-directory(在这个目录中,我有一些其他文件,如下所示) 我的文件。lbl 第一档。文本 这是一个只有代码的“aux”目录,文件下载后可以用7zip打开,并正确显示目录结构。 当我尝试用WinRAR解压文件时,它只解压所有外部目录文件,并显示一条错误消息。

  • 我正在尝试解压文件使用Java,它正在编译没有任何错误。当我从工具中调用它,并给出文件的绝对目标路径和源路径时,例如:source:d:\data\test.zip destination:d:\data\op\ 我收到了类似访问被拒绝的错误(我有系统的管理访问权限) 堆栈跟踪: 正在提取:测试/新文本文档-复制(2).txt java.io.FileNotFoundException:d:\da