0

我在解压缩文件并将其写入另一个文件时遇到了这个问题。这是代码。任何人都可以让我知道需要进行哪些更改。

我得到了这个例外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;
}
4

2 回答 2

0

你的代码没有问题。如消息所述,文件有问题。你确定它是压缩的,而不是 GZipped 例如?一个部分被 GZipped 会更常见。试一试GZIPInputStream.

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

于 2013-09-17T00:02:50.330 回答
0

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

!回答!

我试着写了一点,然后我把它换了throws IOExceptiontry/catch-block现在一切正常了。异常是一个众所周知的错误。你必须把所有的都放在 a 中try/catch-block,并且在 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;
}
于 2015-04-08T13:08:30.477 回答