Java如何通过导出超大Excel文件解决内存溢出问题
发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,这篇文章将为大家详细讲解有关Java如何通过导出超大Excel文件解决内存溢出问题,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。1.采用Poi中的SXSSFWork
千家信息网最后更新 2026年11月02日Java如何通过导出超大Excel文件解决内存溢出问题
这篇文章将为大家详细讲解有关Java如何通过导出超大Excel文件解决内存溢出问题,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
1.采用Poi中的SXSSFWorkbook
在实现excel导出时,在数据量过大的情况下,总是容易发生内存溢出的情况。可以使用POI提供的 SXSSFWorkbook 类来避免内存溢出。
2.maven中引入Poi
org.apache.poi poi 4.1.2 org.apache.poi poi-ooxml 4.1.2 org.apache.poi poi-ooxml-schemas 4.1.2
3.测试过程
先使用普通的写法测试(XSSFWorkbook),编写writeNormalExcelTest测试方法,写入的行数太多时,会报内存溢出(在设置-server -Xmx64m -Xms64m -Xmn32m的情况下)。
接着编写SXSSFWorkbook操作excel的测试,测试方法writeHugeExcelTest(同样在设置-server -Xmx64m -Xms64m -Xmn32m的情况下),结果证明无内存溢出,能完好的导出1000000行测试数据,整个Java类代码如下:
4.单元测试Java代码
package cn.gzsendi.exceltest;import java.io.FileOutputStream;import java.io.IOException;import org.apache.poi.ss.usermodel.Cell;import org.apache.poi.ss.usermodel.Row;import org.apache.poi.ss.usermodel.Sheet;import org.apache.poi.ss.usermodel.Workbook;import org.apache.poi.xssf.streaming.SXSSFWorkbook;import org.apache.poi.xssf.usermodel.XSSFWorkbook;import org.junit.Test;public class HugeExcelExportTest { private int totalRowNumber = 1000000; //写入的excel数据行数 private int totalCellNumber = 40; //excel每行共40列 //普通的写入excel的方法,会消耗内存,写入的行数太大时,会报内存溢出 @Test public void writeNormalExcelTest(){ Workbook wb = null; FileOutputStream out = null; try { long startTime = System.currentTimeMillis(); wb = new XSSFWorkbook(); Sheet sheet = wb.createSheet("Sheet 1"); //定义Row和Cell变量, Rows从0开始. Row row; Cell cell; for (int rowNumber = 0; rowNumber < totalRowNumber; rowNumber++) { row = sheet.createRow(rowNumber); for (int cellNumber = 0; cellNumber < totalCellNumber; cellNumber++) { cell = row.createCell(cellNumber); cell.setCellValue(Math.random()); //写入一个随机数 } //打印测试, if(rowNumber % 10000 ==0) { System.out.println(rowNumber); } } //Write excel to a file out = new FileOutputStream("d:\\temp\\normalExcel_" + totalRowNumber + ".xlsx"); wb.write(out); long endTime = System.currentTimeMillis(); System.out.println("process " + totalRowNumber + " spent time:" + (endTime - startTime) + " ms."); } catch (Exception e) { e.printStackTrace(); } finally { try { if(out != null) out.close(); } catch (IOException e) { e.printStackTrace(); } try { if(wb != null) wb.close(); } catch (IOException e) { e.printStackTrace(); } } } //结合临时文件压缩等写入excel,默认超过100行就写到临时文件,不会报内存溢出 @Test public void writeHugeExcelTest(){ SXSSFWorkbook wb = null; FileOutputStream out = null; try { long startTime = System.currentTimeMillis(); wb = new SXSSFWorkbook();//默认100行,超100行将写入临时文件 wb.setCompressTempFiles(false); //是否压缩临时文件,否则写入速度更快,但更占磁盘,但程序最后是会将临时文件删掉的 Sheet sheet = wb.createSheet("Sheet 1"); //定义Row和Cell变量, Rows从0开始. Row row; Cell cell; for (int rowNumber = 0; rowNumber < totalRowNumber; rowNumber++) { row = sheet.createRow(rowNumber); for (int cellNumber = 0; cellNumber < totalCellNumber; cellNumber++) { cell = row.createCell(cellNumber); cell.setCellValue(Math.random()); //写入一个随机数 } //打印测试, if(rowNumber % 10000 ==0) { System.out.println(rowNumber); } } //Write excel to a file out = new FileOutputStream("d:\\temp\\hugeExcel_" + totalRowNumber + ".xlsx"); wb.write(out); long endTime = System.currentTimeMillis(); System.out.println("process " + totalRowNumber + " spent time:" + (endTime - startTime) + " ms."); } catch (Exception ex) { ex.printStackTrace(); } finally { if (wb != null) { wb.dispose();// 删除临时文件,很重要,否则磁盘可能会被写满 } try { if(out != null) out.close(); } catch (IOException e) { e.printStackTrace(); } try { if(wb != null) wb.close(); } catch (IOException e) { e.printStackTrace(); } } }}关于"Java如何通过导出超大Excel文件解决内存溢出问题"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。
内存
测试
文件
情况
数据
方法
篇文章
问题
普通
代码
变量
更多
磁盘
随机数
会报
不错
完好
实用
重要
内容
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
瑰夏咖啡
精品咖啡豆
上海卓越科技互联网
互联网科技公司经营范围
互联网中国科技
互联网金融 科技
广州互联网科技公司
深圳互联网络科技有限公司
艾特科技互联网
人人互联网科技是培训
互联网科技中介
福州新华互联网科技学校 知乎
广西互联网科技孵化中心
健康食品互联网创新科技园项目
华夏恒生科技与互联网科技
徐州市互联网科技有限公司
沐思想互联网科技有限公司
科技信息时代互联网发展
重庆科技产业互联网有哪些
上海旺乐尼互联网科技有限公司
西安纸贵互联网科技有限公司
互联网 的科技创新
互联网软件和科技
赶超互联网科技 微信多开
广州市恰铎互联网科技有限公司
互联网科技人工智能实验室
上海京穆互联网科技有限公司
风投北京互联网科技
福州德业互联网科技
科技互联网专业工作会议发言稿