java处理excel-xlsx格式大文件的解决方案
1、第一次读取7M左右的ecxel文件,使用poi 库实现,参考了下面的博文。
http://www.cnblogs.com/chenfool/p/3632642.html
使用上面的方法在 下面WorkbookFactory.create()这里会出现内存溢出的错误,将eclipse的参数调整为-Xmx3072m,仍然会出现这个错误。
fis = new FileInputStream(file);
book = WorkbookFactory.create(fis); 应该是因为上面的方法使用的DOM解析模式,使用流式解析大文件,不会出现内存溢出的问题。 2、经过google,找到了下面的帖子:
http://www.iteye.com/topic/624969
excel2007文件格式与之前版本不同,之前版本采用的是微软自己的存储格式。07版内容的存储采用XML格式,所以,理所当然的,对大数据量的 xlsx文件的读取采用的也是XML的处理方式SAX。 使用上面的方法,在
XMLReader parser = XMLReaderFactory.createXMLReader("org.apache.xerces.parsers.SAXParser");
这一句会出现
java.lang.ClassNotFoundException: org.apache.xerces.parsers.SAXParser的错误。
自己下载xerces.jar文件载入后会出现
java.lang.AbstractMethodError: org.apache.xerces.dom.ElementImpl.getTextContent()Ljava/lang/String的错误。
看来只能找其他方法了。
3、经过一番google,找到了下面这个链接
https://blogs.oracle.com/mei/entry/java_lang_classnotfoundexception_org_apache
按照上面的链接中介绍的方法,将生成XMLReader的代码改为下面的方式即可解决问题。
SAXParserFactory m_parserFactory = null;
// If unable to create an instance, let's try to use
// the XMLReader from JAXP
m_parserFactory = SAXParserFactory.newInstance();
m_parserFactory.setNamespaceAware(true); XMLReader parser = m_parserFactory.newSAXParser().getXMLReader();
附录:整个过程中参考的网页链接如下:
java 读取excel 2007 .xlsx文件 poi实现 经测试7M左右文件没有问题
http://www.cnblogs.com/chenfool/p/3632642.html
大数据量的excel文件读取——excel2007(含代码及示例) 经测试36M左右文件没有问题,需按照上面所述稍作修改。
http://www.iteye.com/topic/624969
java.lang.AbstractMethodError: org.apache.xerces.dom.ElementImpl.getTextContent()Ljava/lang/String xerces引起此错误的正确原因描述
http://stackoverflow.com/questions/14014989/java-lang-abstractmethoderror-org-apache-xerces-dom-elementimpl-gettextcontent
java.lang.ClassNotFoundException: org.apache.xerces.parsers.SAXParser 不使用xerces.jar的解决办法
https://blogs.oracle.com/mei/entry/java_lang_classnotfoundexception_org_apache
java处理excel-xlsx格式大文件的解决方案的更多相关文章
- POI操作Excel详解,读取xls和xlsx格式的文件
package org.ian.webutil; import java.io.File; import java.io.FileInputStream; import java.io.FileN ...
- Java 导出Excel xlsx、xls, CSV文件
通用导出功能: 1.支持Excel xlsx.xls 2.支持CSV文件导出 3.数据库查询分页导出.内存导出 4.支持大批量数据导出 使用步骤如下 导入jar <dependency> ...
- Java中用内存映射处理大文件
在处理大文件时,如果利用普通的FileInputStream 或者FileOutputStream 抑或RandomAccessFile 来进行频繁的读写操作,都将导致进程因频繁读写外存而降低速度.如 ...
- Java使用内存映射实现大文件的上传
在处理大文件时,如果利用普通的FileInputStream 或者FileOutputStream 抑或RandomAccessFile 来进行频繁的读写操作,都将导致进程因频繁读写外存而降低速度.如 ...
- java解析Excel日期格式转换问题
Excel上传导入,Excel里面单元格是日期的会解析出来数字,比如2020-07-11会解析为44023解决方法一: Excel单元格格式设置为文本格式.解决方法二: 使用代码处理,把解析出来的44 ...
- JS上传大文件的解决方案
最近遇见一个需要上传百兆大文件的需求,调研了七牛和腾讯云的切片分段上传功能,因此在此整理前端大文件上传相关功能的实现. 在某些业务中,大文件上传是一个比较重要的交互场景,如上传入库比较大的Excel表 ...
- Web上传大文件的解决方案
需求:项目要支持大文件上传功能,经过讨论,初步将文件上传大小控制在500M内,因此自己需要在项目中进行文件上传部分的调整和配置,自己将大小都以501M来进行限制. 第一步: 前端修改 由于项目使用的是 ...
- vue上传大文件的解决方案
众所皆知,web上传大文件,一直是一个痛.上传文件大小限制,页面响应时间超时.这些都是web开发所必须直面的. 本文给出的解决方案是:前端实现数据流分片长传,后面接收完毕后合并文件的思路. 实现文件夹 ...
- php无法上传大文件完美解决方案
php.ini无法上传大文件完美解决办法 1.打开php.ini(打开方式就不用说了,百度一大堆) 2.查找post_max_size 表单提交最大数值,此项不是限制上传单个文件的大小,而是针对整个表 ...
随机推荐
- 文件后缀与mime类型对应表
//文档文件类型的 .ai application/postscript .eps application/postscript .exe application/octet-stream ...
- Java-精确计算工具类
import java.math.BigDecimal; import java.math.RoundingMode; /** * 精确计算工具类(加,减,乘,除,返回较大值,返回较小值) */ pu ...
- java中的不死兔问题(斐波那契数列)(递归思想)
有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? public class Item { public static ...
- SpringBoot全局异常的捕获设置
1.新建立一个捕获异常的实体类 如:LeeExceptionHandler package com.leecx.exception; import javax.servlet.http.HttpSer ...
- c/c++笔试面试试题
C 试题(纯属转载) 1.求下面函数的返回值(微软) int func(x) { int countx = 0; while(x) { countx ++; ...
- LoadRunner11学习记录二 -- 进行cookie模拟
1.LoadRunner录制打开一个网页的脚本,会生成脚本夹杂迅雷,迅雷看看,百度等链接地址,这是因为ie打开之后会加载未禁用的加载项.需要把相关的加载项禁用掉. 禁用ie加载项步骤,工具--管理加载 ...
- [C++] advanced reference
advanced reference
- csv乱码
可能:iconv转码导致,本身已经是GBK,又进行了GBK转码
- HBase表的memstore与集群memstore
一直有一个问题,今天调查了一下源码算是明白了. ===问题=== 通过java api(如下代码所示)在创建表的时候,可以通过setMemStoreFlushSize函数来指定memstore的大小, ...
- 3.3.7 跳表 SkipList
一.前言 concurrentHashMap与ConcurrentSkipListMap性能测试 在4线程1.6万数据的条件下,ConcurrentHashMap 存取速度是ConcurrentSki ...