码迷,mamicode.com
首页 > 编程语言 > 详细

JAVA关于POI导出Excel内存溢出的解决方案

时间:2015-05-16 20:36:17      阅读:155      评论:0      收藏:0      [点我收藏+]

标签:

JAVA关于POI导出Excel内存溢出的解决方案

在我们使用JAVA开发过程中,经常要导出查询获得的数据,这些数据一般情况下都是以Excel存储的,因此我们在导出数据的时候要使用JAVA的POI库,其主要是对各种windows平台的数据格式进行操作,在这里,我们是对Excel操作。

生成Excel的过程原理是这样的,首先,我们对数据库进行查询,获取相应的结果集,一般是list集合,然后生成Workbook对象,根据生成的Workbook对象获取sheet对象,根据此sheet对象获取Row对象,再根据Row对象获取Cell对象,最后设置cell单元格的值,循环生成Row和Cell对象,将list中的值写入Cell中,写完后,将Workbook对象写入相应的流对象即可。

在上述过程中,若list集合的数据不多,不会出现问题,倘若list中的数据足够多(几万条以上),则会导致内存溢出,导出失败。

其解决方案就是我们分批导出,每次查询固定数量的list数据集合,将其中的数据写入一个Workbook对象中,依次循环,直至将所有的数据写如Workbook中,此解决方案会生成多个Workbook对象,在供浏览器下载的时候也会有问题,因此,我们还要对生成的多个Excel文件进行打包压缩,即调用操作系统的tar命令(一般来说应用都部署在linux环境下)生成一个压缩包,下载此压缩包即可。

注:在讲Workbook对象写入OutputStream流中,在构建OutputStream时其路径不能是web容器中的路径,否则永远只能生成一个Workbook对象,原因不明

JAVA关于POI导出Excel内存溢出的解决方案

标签:

原文地址:http://blog.csdn.net/u010999240/article/details/45770577

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!