一个坑poi大数据量导入时的java.lang.IllegalStateException: Zip File is closed

Posted 榕树猎人

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一个坑poi大数据量导入时的java.lang.IllegalStateException: Zip File is closed相关的知识,希望对你有一定的参考价值。

本帖子没有答案,只是说一下坑,余下的自己决定。

Caused by: java.lang.IllegalStateException: Zip File is closed

         at org.apache.poi3.openxml4j.util.ZipFileZipEntrySource.getEntries(ZipFileZipEntrySource.java:45)

         at org.apache.poi3.openxml4j.opc.ZipPackage.getPartsImpl(ZipPackage.java:161)

         at org.apache.poi3.openxml4j.opc.OPCPackage.getParts(OPCPackage.java:662)

         at org.apache.poi3.openxml4j.opc.OPCPackage.open(OPCPackage.java:223)

         at org.apache.poi3.openxml4j.opc.OPCPackage.open(OPCPackage.java:186)

         at com.iss.itms.util.excel.BigDataParseExcelUtil.process(BigDataParseExcelUtil.java:85)

         at com.iss.itms.ebankcertificate.EbankCertificateOperate.impdata(EbankCertificateOperate.java:405)

         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

         at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)

         at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

         at java.lang.reflect.Method.invoke(Method.java:498)

         at com.toft.core2.service.ServiceManager.callService(ServiceManager.java:74)

         ... 61 more

 

我代码这个位置EbankCertificateOperate.impdata(EbankCertificateOperate.java:405)进行了解析传来的路径。

这个错误的原因是路径错误,就是传来的excel的路径错误。

 

具体的原因就是你的路径是在浏览器中选择获得的路径,但是大部分浏览器都进行了路径安全处理;就是路径都替换成了(C:\\fakepath\\---),然后就报错了。

其中一个方法:通过一下jsp代码可以获得绝对地址:

//附带不用修改浏览器安全配置的javascript代码,兼容ie, firefox全系列

function getPath(obj)  
{  
  if(obj)  
    {  
 
    if (window.navigator.userAgent.indexOf("MSIE")>=1)  
      {  
        obj.select();  
 
      return document.selection.createRange().text;  
      }  
 
    else if(window.navigator.userAgent.indexOf("Firefox")>=1)  
      {  
      if(obj.files)  
        {  
 
        return obj.files.item(0).getAsDataURL();  
        }  
      return obj.value;  
      }  
    return obj.value;  
    }  
}  
//参数obj为input file对象

通过以上我本地成功了,但是部署测试环境也是不行。

网上找到的方法都没解决,我就用流的方式。但还是报错a.io.IOException: Unable to read entire header; 0 bytes read; expected 512 bytes,这个没找到方法。

最后我就有用了普通方法导入的excel。

 

大数据量导入的方法见我另一个博客:https://www.cnblogs.com/daguozb/p/10031970.html,在OPCPackage pkg = OPCPackage.open(filename);这里发生的错误。

写本博客目的虽然没解决大家的问题,只是提供我处理的过程参考参考,避免浪费更多的时间。

以上是关于一个坑poi大数据量导入时的java.lang.IllegalStateException: Zip File is closed的主要内容,如果未能解决你的问题,请参考以下文章

java poi Excel大数据量导入怎么提高速度

poi导出大数据,报内存溢出怎么解决

POI实现大数据EXCLE导入导出,解决内存溢出问题

POI采坑系列:POI 导入导出Excel时,需要注意的时间格式####

EXCEL大数据量导出的解决方案

POI读写大数据量EXCEL