Java EOFEException:ZLIB输入流意外结束

Java EOFEException:ZLIB输入流意外结束,java,zip,Java,Zip,我在解压一个文件并将其写入另一个文件时遇到了这个问题。这是代码。有人能告诉我需要做什么修改吗 当((len=zis.read(buffer))>0) 你的代码没有问题。正如消息所说,文件有问题。你确定它是压缩的,而不是压缩的吗?更常见的情况是将零件压缩。尝试一个gzip输入流。 注意:没有必要使用ByteArrayInputStream。这完全是浪费时间和空间。只需将zip/gzip输入流直接传递给您的createCSVFile()方法。我也有这个错误,我搜索了一点。。。我读到一定有zis.cl

我在解压一个文件并将其写入另一个文件时遇到了这个问题。这是代码。有人能告诉我需要做什么修改吗

当((len=zis.read(buffer))>0)


你的代码没有问题。正如消息所说,文件有问题。你确定它是压缩的,而不是压缩的吗?更常见的情况是将零件压缩。尝试一个
gzip输入流。


注意:没有必要使用
ByteArrayInputStream。
这完全是浪费时间和空间。只需将zip/gzip输入流直接传递给您的
createCSVFile()
方法。

我也有这个错误,我搜索了一点。。。我读到一定有
zis.closeEntry()
len=zis.read(buffer)
之前,但我尝试了它,然后错误出现在
zis.closeEntry()
我问过谷歌,答案如下:

!!回答

我试着写了一点,然后切换了
try/catch块中的
throwsioexception
,现在一切正常。 这个异常是一个众所周知的bug。您必须将所有内容放入一个
try/catch块
,在catch中什么也不做

private FileItem readZippedFileRequest(HttpServletRequest request,Part part, String fileName) {

    FileItem fileItem = null;
    byte[] buffer = new byte[1024];
    try{
        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);
        }       
    }catch(IOException ex){
        //Do nothing here
    }
    return fileItem;
}

你能发布堆栈跟踪吗?
private FileItem readZippedFileRequest(HttpServletRequest request,Part part, String fileName) {

    FileItem fileItem = null;
    byte[] buffer = new byte[1024];
    try{
        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);
        }       
    }catch(IOException ex){
        //Do nothing here
    }
    return fileItem;
}