一个坑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);这里发生的错误。

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

原文地址:https://www.cnblogs.com/daguozb/p/10043986.html

时间: 2024-10-11 17:56:55

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

从另一个角度看大数据量处理利器 布隆过滤器

思路:从简单的排序谈到BitMap算法,再谈到数据去重问题,谈到大数据量处理利器:布隆过滤器. 情景1:对无重复的数据进行排序 @给定数据(2,4,1,12,9,7,6)如何对它排序? 方法1:基本的排序方法包括冒泡,快排等. 方法2:使用BitMap算法 方法1就不介绍了,方法2中所谓的BitMap是一个位数组,跟平时使用的数组的唯一差别在于操作的是位. 首先是开辟2个字节大小的位数组,长度为16(该长度由上述数据中最大的数字12决定的)如图         然后,读取数据,2存放在位数组中下

企业级控件库之大数据量分页控件(转)

在上篇:我介绍了原创企业级控件库之组合查询控件,这篇我将给大家介绍:企业级控件库之大数据量分页控件.  摘要  说到分页,大家采用的方法各有千秋,分页在一个中大型软件项目中对数据的快速呈现起到很关键的作用,试想一个数据量上几十万或者几百万的数据表,要是没有分页功能会是一个什么样的效果.总的说来,大家采用的分页方法大同小异,但到底那种方法才是最佳的呢,各有各的看法,让数据说话最有效.今天我给大家分享一个WinForm下大数据量分页控件(当然分页思想也可用于WebForm).虽然不能说是最佳的,但在

POI读写大数据量excel,解决超过几万行而导致内存溢出的问题

1. Excel2003与Excel2007 两个版本的最大行数和列数不同,2003版最大行数是65536行,最大列数是256列,2007版及以后的版本最大行数是1048576行,最大列数是16384列. excel2003是以二进制的方式存储,这种格式不易被其他软件读取使用:而excel2007采用了基于XML的ooxml开放文档标准,ooxml使用XML和ZIP技术结合进行文件存储,XML是一个基于文本的格式,而且ZIP容器支持内容的压缩,所以其一大优势是可以大大减小文件的尺寸. 2. 大批

解决WCF大数据量传输 ,System.Net.Sockets.SocketException: 远程主机强迫关闭了一个现有的连接

开发中所用的数据需要通过WCF进行数据传输,结果就遇到了WCF大量传输问题 也就是提示System.Net.Sockets.SocketException: 远程主机强迫关闭了一个现有的连接 网上解决方案都是千篇一律互相转发的,并且没有明确的解决方案或者按照,各个博客中的解决方案都没能解决这个问题. 为此我整整浪费了一天时间用来解决这个问题,而且用了最笨的办法一点点的尝试网上所查到的方案.对于精研WCF来说的这可能是一个小问题,但是对于仅仅了解wcf,一知半解的会很困惑.将解决方案贴出来希望能帮

POI读写大数据量EXCEL

大数据量的excel一般都是.xlsx格式的,网上使用POI读写的例子比较多,但是很少提到读写非常大数据量的excel的例子,POI官网上提到XSSF有三种读写excel,POI地址:http://poi.apache.org/spreadsheet/index.html.官网的图片: 可以看到有三种模式: 1.eventmodel方式,基于事件驱动,SAX的方式解析excel(.xlsx是基于OOXML的),CPU和内存消耗非常低,但是只能读不能写 2.usermodel,就是我们一般使用的方

数据库水平分表(一个大数据量的表)

一.当一张表很大时,比如微信账号.facebook账号.QQ号.谷歌账号系统等,都是大数据量的一张表结构.那么必然需要进行拆分,即水平拆分. 二.表的水平拆分规则. 原文地址:https://www.cnblogs.com/igoodful/p/8974988.html

poi大数据读写excel

一.描述 前端时间写了注解方式Excel的读取和写入,它是根据注解完成Excel的操作,虽说支持大数据,但对于超大数据就无能为力了,因为它的读写期间都是将所有数据放入系统内存的,除非你有超大的内存. 因项目需要对超大数据的Excel读写操作,于是网上找了个超大数据的读写代码,这个不需要太大内存.并对此进行了简单的修改. 原理如下: Excel超大数据读取:抽象Excel2007读取器,excel2007的底层数据结构是xml文件,采用SAX的事件驱动的方法解析 xml,需要继承DefaultHa

Sql server 大数据量插入速度慢或丢失数据解决办法

问题描述:我的设备每秒2000条数据插入数据库,2个设备总共4000条,当在程序里面直接用insert语句插入时,两个设备同时插入大概总共能插入约2800条左右,数据丢失约1200条左右,找了好多解决方法,整理了两种效果比较明显的解决办法: 第一种:使用Sql Server函数: 1.将数据组合成字串,使用函数将数据插入内存表,后将内存表数据复制到要插入的表. 2.组合成的字符换格式:'111|222|333|456,7894,7458|0|1|2014-01-01 12:15:16;1111|

java 导出Excel 大数据量

出处: http://lyjilu.iteye.com/ 分析导出实现代码,XLSX支持: /** * 生成<span style="white-space: normal; background-color: #ffffff;">XLSX</span>,2007版本的excel,每个sheet无6.5W的行数限制,但是到了一定数量,可能内存溢出, * 次方法适合在预计10W以下的数据导出时使用,本机测试,14W可以导出.列数量在8列左右 * * @param