EOFException:ZLIB输入流的意外结束

时间:2013-09-16 20:46:52

标签: java zip

我在解压缩文件并将其写入另一个文件时遇到此问题。这是代码。任何人都可以告诉我需要做哪些更改。

我在使用while ((len = zis.read(buffer)) > 0)

的行上获得此异常
private FileItem readZippedFileRequest(HttpServletRequest request,Part part, String fileName) {

    FileItem fileItem = null;
    byte[] buffer = new byte[1024];

    InputStream inputStream = part.getInputStream();
    ZipInputStream zis = new ZipInputStream(inputStream);

    ZipEntry entry;    
    while ((entry = zis.getNextEntry()) != null) {

        ByteArrayOutputStream fos = new ByteArrayOutputStream();

        int len;
        while ((len = zis.read(buffer)) > 0) {
            fos.write(buffer, 0, len);
        }

        InputStream myByteArray = new ByteArrayInputStream(fos.toByteArray());
        fileItem = createCSVFile(myByteArray, fileName,ImportExportConstant.FILE_TYPE_EXCEL);
    }       

    return fileItem;
}

2 个答案:

答案 0 :(得分:0)

您的代码没有任何问题。消息说,文件有问题。你确定它是压缩的,而不是GZipped吗?一部分被GZip更常见。试试GZIPInputStream.

NB不需要ByteArrayInputStream.这完全是浪费时间和空间。只需将zip / gzip输入流直接传递给createCSVFile()方法。

答案 1 :(得分:0)

我也有这个错误,我搜索了一下......我已经读过zis.closeEntry();之前必须有len = zis.read(buffer)但我尝试了然后错误出现在{{1} } 我问谷歌,这是答案:

!回答!

我尝试写了一点,然后我在zis.closeEntry();中切换了throws IOException,现在没事了。 异常是一个众所周知的错误。你必须将所有内容都放在try/catch-block中并且在捕获中不执行任何操作。

try/catch-block