日期:2014-05-20  浏览次数:20794 次

poi处理Excel内存溢出,急!多谢各位
public Workbook readExcel(String filePath){
logger.info("开始执行readExcel方法!");
FileInputStream fis = null;
BufferedInputStream bis = null;
Workbook wb = null;
File file;
try {
            file = new File(filePath);
            if( !file.exists() )
            {
             logger.info("程序报错-文件不存在");
                throw new RuntimeException("文件不存在");
            }else{
             logger.info("正在读取文件"+filePath);
                fis = new FileInputStream(file);
                bis = new BufferedInputStream(fis);
                wb = WorkbookFactory.create(bis);
            }
            fis.close();
            bis.close();
        } catch (IOException e) {
         logger.info(e);
            e.printStackTrace();
        } catch (InvalidFormatException e) {
         logger.info(e);
            e.printStackTrace();
        } finally {
            if(bis != null){
                try {
                    fis.close();
                    bis.close();
                } catch (IOException e) {
                 logger.info(e);
                    e.printStackTrace();
                }
            }
        }
logger.info("readExcel方法执行结束!");
        return wb;
    }


用这个读取几千条数据没什么问题,但是读3w条数据就会报错内存溢出。。。怎么办呢?有什么解决办法么?谢谢各位了!

------解决方案--------------------
将JVM内存设置大些
------解决方案--------------------
如果没记错的话POI 都是一次性将excel完全加载到内存

如果excel文件很大的话 增大JVM内存是治标的方法

如果你用的是 office2007以上的 excel的话,可以用winrar等压缩工具 解压 就可以看到,里边是一些xml等文件  然后自己用sax方式解析吧(貌似网上有类似的东西)
------解决方案--------------------
加大堆内存。配置一下
------解决方案--------------------
无法彻底解决,只能曲线救国。
1、调大JVM内存
2、转换成xml,然后sax、dom4j解析等,文件大了也会溢出的吧?
3、分割excel文件