- 浏览: 531541 次
- 性别:
- 来自: 天津
文章分类
- 全部博客 (230)
- java (87)
- c/c++/c# (39)
- ASP.net MVC (4)
- eclipse/visual studio (3)
- tomcat/weblogic/jetty (13)
- linux/unix/windows (20)
- html/javascript/jquery/kendo/bootstrap/layui/vue/react (31)
- hibernate/struts/spring/mybatis/springboot (21)
- lucene/solr/ELK (2)
- shiro (0)
- oracle/sqlserver/mysql/postgresql (23)
- shell/python/ruby (6)
- android (0)
- maven/ant (1)
- freemarker/thymeleaf/velocity (1)
- open source project (41)
- cache/memcached/redis (0)
- nosql/hadoop/hbase/mongodb (0)
- system architecture/dubbo/zookeeper (0)
- software testing (0)
- system optimization (0)
- system security (0)
- tcp/udp/http (2)
- roller/wordpress (2)
- 工具收藏 (8)
- 文摘 (4)
- 生活 (0)
最新评论
-
coconut_zhang:
这个demo 非常完整了,是指下面说的那个html 模版,模版 ...
flying sauser, thymeleaf实现PDF文件下载 -
a93456:
你好,你有完整的demo吗? String template这 ...
flying sauser, thymeleaf实现PDF文件下载 -
yujiaao:
fn 函数循环是没有必要的啊,可以改成
protecte ...
Java 笛卡尔积算法的简单实现 -
安静听歌:
设置了.setUseTemporaryFileDuringWr ...
使用jxl导出大数据量EXCEL时内存溢出的解决办法 -
q280499693:
写的很详细,但是我现在想知道他们是怎么定位log4j.prop ...
关于SLF4J结合Log4j使用时日志输出与指定的log4j.properties不同
使用jxl导出大数据量EXCEL时内存溢出的解决办法
- 博客分类:
- java
POI或者JXL在导出大量数据的时候,由于它们将每一个单元格生都成一个Cell对象,所以很容易导致内存溢出。
1、通过jx1最新版本的采用临时文件写入EXCEL功能,设定临时文件的位置,可以有效的避免内存溢出:
wbSetting.setUseTemporaryFileDuringWrite(true);
wbSetting.setTemporaryFileDuringWriteDirectory(new File(excelPath));//临时文件夹的位置
2、EXCEL获取的list集合先读取数据总行数,再通过ROWNUM进行控制,设定每次读取多少行数据,比如一个List设定为50000;
wbSetting.setTemporaryFileDuringWriteDirectory(new File(excelPath));//临时文件夹的位置
2、EXCEL获取的list集合先读取数据总行数,再通过ROWNUM进行控制,设定每次读取多少行数据,比如一个List设定为50000;
WorkbookSettings wbSetting = new WorkbookSettings();
wbSetting.setUseTemporaryFileDuringWrite(true);
wbSetting.setTemporaryFileDuringWriteDirectory(new File(excelPath));//临时文件夹的位置
workbook = Workbook.createWorkbook(new File(fullPath),wbSetting);
int returnCount=0;
if(null!=pager)
{
returnCount = BrasDatabase.getReturnCount(pager.getStartTime(),
pager.getEndTime(), pager);
}
if (returnCount > 0) {
pager.setPageSize(50000);
pager.setTotalRows(returnCount);// 获取总行数
pager.setNewTotalPages(pager.getTotalRows()); // 总页数
for (int i = 1; i <= pager.getTotalPages(); i++) {
pager.setCurrentPage(i); // 当前页面d
List<BrasAuth> list = BrasDatabase
.getBrasAuthResultByIpToExcelList(pager
.getStartTime(), pager.getEndTime(), pager);
this.createExcel(list,excelFilePath);
list.clear();
}
}
3、在写入EXCEL的时候,将读取的LIST分割,每50000条数据生成一个EXCEL的sheet(一个sheet最多能存储60000多行数据),再写入,写入的时候,如果设置了采用临时文件写入的话,jx1会自动采用生成临时文件的方式写入EXCEL:
wbSetting.setUseTemporaryFileDuringWrite(true);
wbSetting.setTemporaryFileDuringWriteDirectory(new File(excelPath));//临时文件夹的位置
workbook = Workbook.createWorkbook(new File(fullPath),wbSetting);
int returnCount=0;
if(null!=pager)
{
returnCount = BrasDatabase.getReturnCount(pager.getStartTime(),
pager.getEndTime(), pager);
}
if (returnCount > 0) {
pager.setPageSize(50000);
pager.setTotalRows(returnCount);// 获取总行数
pager.setNewTotalPages(pager.getTotalRows()); // 总页数
for (int i = 1; i <= pager.getTotalPages(); i++) {
pager.setCurrentPage(i); // 当前页面d
List<BrasAuth> list = BrasDatabase
.getBrasAuthResultByIpToExcelList(pager
.getStartTime(), pager.getEndTime(), pager);
this.createExcel(list,excelFilePath);
list.clear();
}
}
3、在写入EXCEL的时候,将读取的LIST分割,每50000条数据生成一个EXCEL的sheet(一个sheet最多能存储60000多行数据),再写入,写入的时候,如果设置了采用临时文件写入的话,jx1会自动采用生成临时文件的方式写入EXCEL:
for(int i=1;i<=list.size();i++)
{
if(i%50000==0)
{
sheetName=format.format(new Date());
toExcel(list.subList(reNum, i),sheetName);
reNum=i;
}
}
{
if(i%50000==0)
{
sheetName=format.format(new Date());
toExcel(list.subList(reNum, i),sheetName);
reNum=i;
}
}
------------------------------------------------------------------------------------------------------------------------------
写文本格式的Excel文件,而不是用POI等生成二进制的文件, 可以避免创建大批量的对象时内存溢出.代码如下可以作为参考:
第一种格式,CSV,最简单的,格式最差,最基本的行列,不能合并,不能设置着色,
第二种,HTML格式的,如:"<TABLE>....</TABLE>"这样的文本,后辍名改为XLS就可以了,可以设置跨行列的合并,可以着色,图片没试过,估计是可以的,还可以设置单元格对齐,单元格的格式等
第一种格式,CSV,最简单的,格式最差,最基本的行列,不能合并,不能设置着色,
第二种,HTML格式的,如:"<TABLE>....</TABLE>"这样的文本,后辍名改为XLS就可以了,可以设置跨行列的合并,可以着色,图片没试过,估计是可以的,还可以设置单元格对齐,单元格的格式等
public static boolean createExcelFileByStream(String path, List list) {
try {
//定义表头
String userxlsinfo = "序号\t用户ID\t姓名\t手机\t留言信息";
File file = new File("c:\\streamExcel.xls");
if (file.isFile()) {
file.mkdir();
}
FileOutputStream out = new FileOutputStream(file);
OutputStreamWriter osw = new OutputStreamWriter(out, "GB2312");
BufferedWriter bw = new BufferedWriter(osw);
// 创建表头
String sheader = userxlsinfo;
sheader += "\r\n";
bw.write(sheader);
if (list != null) {
// List list 此处可以遍历list对象
for (int i = 0; i < 5; i++) {
StringBuffer mess = new StringBuffer();
// 用户信息
mess.append((i + 1) + "\t");
mess.append((i + 1) + "\t");
mess.append((i + 1) + "\t");
mess.append((i + 1) + "\t");
mess.append((i + 1) + "\t");
mess.append("\r\n");
System.out.println(i);
bw.write(mess.toString());
}
}
bw.close();
osw.close();
out.close();
return true;
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return false;
}
注意:表头部分和数据部分的间隔一定要用'\t ' 如果改用','号则导出文件用excel打开展示会有问题.
try {
//定义表头
String userxlsinfo = "序号\t用户ID\t姓名\t手机\t留言信息";
File file = new File("c:\\streamExcel.xls");
if (file.isFile()) {
file.mkdir();
}
FileOutputStream out = new FileOutputStream(file);
OutputStreamWriter osw = new OutputStreamWriter(out, "GB2312");
BufferedWriter bw = new BufferedWriter(osw);
// 创建表头
String sheader = userxlsinfo;
sheader += "\r\n";
bw.write(sheader);
if (list != null) {
// List list 此处可以遍历list对象
for (int i = 0; i < 5; i++) {
StringBuffer mess = new StringBuffer();
// 用户信息
mess.append((i + 1) + "\t");
mess.append((i + 1) + "\t");
mess.append((i + 1) + "\t");
mess.append((i + 1) + "\t");
mess.append((i + 1) + "\t");
mess.append("\r\n");
System.out.println(i);
bw.write(mess.toString());
}
}
bw.close();
osw.close();
out.close();
return true;
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return false;
}
注意:表头部分和数据部分的间隔一定要用'\t ' 如果改用','号则导出文件用excel打开展示会有问题.
发表评论
-
easypoi 按照模板到出excel并合并单元格
2022-11-10 21:46 106这是entity类,注解的mergeVertical是纵向合 ... -
Java时区处理之Date,Calendar,TimeZone,SimpleDateFormat
2017-03-31 14:59 1281一、概述 1、问题描述 使用Java处 ... -
jxls操作excel文件
2017-03-03 14:51 1013JXLS是基于Jakarta POI API的Excel报表 ... -
eclipse插件Maven添加依赖查询无结果的解决方法(Select Dependency doesn't work)
2016-04-22 08:33 694在eclipse中用过maven的可能都遇到过这种情况,我 ... -
Java_Ant详解
2015-06-15 16:54 6881,什么是antant是构建工 ... -
httpClient通过代理(Http Proxy)进行请求
2014-09-16 14:18 1156httpClient通过代理(Http Proxy)进行请求 ... -
httpclient上传文件及传参数
2014-09-16 11:07 11512用到的包有commons-httpclient-3.0.1. ... -
Java文件下载的几种方式
2013-08-19 14:15 835public HttpServletResponse dow ... -
http上传文件深度解析-高性能http传输
2013-07-23 10:41 9718最近在做web服务器的时候将一些应用集成在了服务器里面,比 ... -
java servlet common-fileupload 实现的文件批量上传
2013-07-18 14:31 6364结合前辈们的代码, 写了个用servlet 和 common ... -
调用axis2 WebService三种方法
2013-06-28 13:41 1744第一:简单的使用axis2包自己实现调用 package ... -
java-jsch实现sftp文件操作
2013-06-26 13:55 3615(曾在天涯)的文章详细讲解了jsch中的函数以及用法 ht ... -
url encode的问题
2012-11-06 08:27 58921.urlencode和decode 字符的编码和解码在有中 ... -
Java集合运算(交集,并集,差集)
2012-11-02 14:59 12932在实现数据挖掘一些算法或者是利用空间向量模型来发现相似文档的时 ... -
Java 笛卡尔积算法的简单实现
2012-10-31 15:26 9438笛卡尔积算法的Java实现: (1)循环内,每次只有一列向下 ... -
java实现求一个项目集合任意元子集的通用算法
2012-10-31 15:25 4在关联规则挖掘过程中,经常涉及到求一个频繁项目集的n元子集,在 ... -
java实现求一个项目集合任意元子集的通用算法
2012-10-31 15:21 1452在关联规则挖掘过程中,经常涉及到求一个频繁项目集的n元子集,在 ... -
使用 HttpClient 和 HtmlParser 实现简易爬虫
2012-06-27 16:33 1242这篇文章介绍了 HtmlParse ... -
分布式计算开源框架Hadoop入门
2012-06-26 13:29 1945引 在SIP项 ... -
CAS集群部署的问题
2012-06-26 09:17 2849CAS单点部署时非常容易配置,且稳定性较好,非常适合中小规模应 ...
相关推荐
jxl写大文件时会出现内存溢出原因 jxl写大文件时会出现内存溢出原因
Android使用jxl快速导出excel表
使用jxl导出Excel表的好例子 导出excel表的例子
jxl导出excel加水印 WritableWorkbook、WritableSheet、WritableCellFormat
jxl导出excel 完整例子工程jxl导出excel 完整例子工程jxl导出excel 完整例子工程 jxl导出excel 完整例子工程jxl导出excel 完整例子工程jxl导出excel 完整例子工程
jxl模版生成excel,采用类似EL表达式的方式生成模版
jxl导入导出excel 详细的描述了如何使用jxl导入导出excel。
JXL操作EXCEL 数据库导出EXCEL相关文件一些详细资料
java版本通过JXL使用模板导出EXCEL
java中使用jxl打印excel报表,java中使用jxl打印excel报表,java中使用jxl打印excel报表
jxl导出excel工具类,封装好了的,实现传递任意集合自动导出excel
java使用jxl导入导出excel,此为中文doc文档,但jxl貌似实现不了单元格画出斜线
使用Java的jxl方式导出到Excel。
使用jxl方式实现Excel表格导出,非常简单而且实用
jxl 导出Excel 支持大数据量导出 导出数据量大 速度也快
jxl对下拉列表的读写操作以及相应的修改功能
java JXL导出Excel源码及jfreechart 生成折线图,饼图 java JXL导出Excel源码及jfreechart 生成折线图,饼图 java JXL导出Excel源码及jfreechart 生成折线图,饼图
使用jxl操作Excel,可以作为一个帮助文件
jxl从数据库中直接导出excel文档java源码
poi jxl 生成EXCEL 报表 POI 用的JAR poi-3.6-20091214.jar jxl 用到的jar jxl-2.6.jar