java实现读取excel,解决大数据量内存溢出

在处理用户上传的可能包含100万行数据的大型Excel文件时,传统读取方法会导致内存溢出。通过使用BigExcelReader工具类尝试解决,但在调用后仍然遇到内存溢出问题。检查Eclipse和JBOSS的虚拟机参数配置无误,最终发现是Eclipse Luna版本中配置的Web容器内存设置过小(之前为256m),将其增大后成功避免了内存溢出。
摘要由CSDN通过智能技术生成

        最近有个需求,用户需要自己上传一个excel表格进来,然后将数据录入进数据库。结果被告知,该excel的数据量可能会有100W行数据。对于这么大的数据量,使用以前的读取工具,很容易造成内存溢出问题。于是在网上寻找解决方法。

找到了该工具类

import java.io.IOException;  
import java.io.InputStream;  
import java.util.Date;  
  




import org.apache.commons.lang.time.DateFormatUtils;
import org.apache.poi.hssf.usermodel.HSSFDateUtil;  
import org.apache.poi.openxml4j.exceptions.OpenXML4JException;  
import org.apache.poi.openxml4j.opc.OPCPackage;  
import org.apache.poi.xssf.eventusermodel.XSSFReader;  
import org.apache.poi.xssf.model.SharedStringsTable;  
import org.apache.poi.xssf.model.StylesTable;  
import org.apache.poi.xssf.usermodel.XSSFCellStyle;  
import org.apache.poi.xssf.usermodel.XSSFRichTextString;  
import org.springframework.web.multipart.MultipartFile;
import org.xml.sax.Attributes;  
import org.xml.sax.ContentHandler;  
import org.xml.sax.InputSource;  
import org.xml.sax.SAXException;  
import org.xml.sax.XMLReader;  
import org.xml.sax.helpers.DefaultHandler;  
import org.xml.sax.helpers.XMLReaderFactory;  
  
public abstract class BigExcelReader{  
      
    enum xssfDataType {  
        BOOL, ERROR, FORMULA, INLINESTR, SSTINDEX, NUMBER,  
    }  
      
    public static final int ERROR = 1;  
    public static final int BOOLEAN = 1;  
    public static final int NUMBER = 2;  
    public static final int STRING = 3;  
    public static final int DATE = 4;  
    public static final String DATE_FORMAT_STR = "yyyy-MM-dd HH:mm:ss";  
      
      
//  private DataFormatter formatter = new DataFormatter();  
    private InputStream sheet;  
    private XMLReader parser;  
    private InputSource sheetSource;  
    private int index = 0;  
      
    /** 
     * 读大数据量Excel 
     *  
     * @param filename 文件名 
     * @param maxColNum 读取的最大列数 
     * @throws IOException 
     * @throws OpenXML4JException 
     * @throws SAXException 
     */  
    public BigExcelReader(String filename) throws IOException, OpenXML4JException, SAXException{  
        OPCPackage pkg = OPCPackage.open(filename);  
        init(pkg);  
    }  
      
    /** 
     * 读大数据量Excel 
     *  
     * @param file Excel文件 
     * @param maxColNum 读取的最大列数 
     * @throws IOException 
     * @throws OpenXML4JException 
     * @throws SAXException 
     */  
    public BigExcelReader(MultipartFile file) throws IOException, OpenXML4JException, SAXException{  
        InputStream inputStream = file.getInputStream();
    OPCPackage pkg = OPCPackage.open(inputStream)
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值