java - Zip文件流引发CRC错误

标签 java zip

我正在尝试将多个文件读取为BLOB(从数据库中),解压缩,压缩并使用JAX-WS流式压缩文件。上面的代码以流方式发送zip文件,但是Windows程序未打开下载的zip文件,并抛出CRC错误。在浏览了一些帖子之后,我添加了zipOutputStream.finish()(就在zipOutStream.flush()之前),该文件似乎可以修复错误,但仅压缩一个文件,而忽略其他文件。

任何帮助深表感谢

try (ResultSet resultSet = pstmt.executeQuery()) {
    try (ByteArrayOutputStream byteStream = new ByteArrayOutputStream()) {
        try (ZipOutputStream zipOutputStream = new ZipOutputStream(byteStream)) {

            while (resultSet.next()) {
                Blob blob = getBlob();

                try (InputStream fileInputStream = new GZIPInputStream(blob.getBinaryStream())) {
                    try (ByteArrayOutputStream fileByteStream = new ByteArrayOutputStream()) {
                        //  Custom method: Copy the above fileInputStream to fileByteStream
                        IOUtils.copy(fileInputStream, fileByteStream);
                        ZipEntry entry = new ZipEntry(fileName);                    
                        zipOutputStream.putNextEntry(entry);
                            zipOutputStream.write(fileInputStream.toByteArray());
                        zipOutputStream.flush();
                        zipOutputStream.closeEntry();
                    }
                }

                try (InputStream inputStream = new ByteArrayInputStream(byteStream.toByteArray());) {
                    InputStreamDataSource inputDataSource = new InputStreamDataSource(fileName, inputStream);
                    dataHandler = new DataHandler(inputDataSource);
                }
            }
        }
    }
}

最佳答案

关闭流

您成功关闭了zip文件中的每个条目。

但是您错过了关闭ZipOutputStream的机会!

ZipOutputStream.close()方法确实写入目录结构。

顺便说一下...。您确实不需要zip文件末尾的目录结构。它仅出于兼容性原因而已。

关于java - Zip文件流引发CRC错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49373714/

相关文章:

java - 线程 "main"java.net.MalformedURLException : unknown protocol: c 中的异常

javascript - 在 Adob​​e Air/Javascript 中压缩和解压缩文件

java - 在客户端下载时创建 Zip 文件

c++ - 如何向 C++ 项目添加和使用 .zip(或 .pak)文件?

java - Java 中的 "java.lang.ArrayIndexOutOfBoundsException"错误

java - Hibernate映射异构继承对象的映射

java - 在 AEM 中以编程方式验证 LDAP 用户

java - 从类路径读取特定资源

linux - Zip 函数垃圾目录路径

Python:如何将一个列表和一个列表的列表映射在一起