0

0

Java POI读取大文件慢如何优化?

心靈之曲

心靈之曲

发布时间:2025-03-13 19:22:28

|

458人浏览过

|

来源于php中文网

原创

高效处理java poi读取大文件难题

在使用java poi处理大型excel文件时,常常会遇到读取速度缓慢的问题,严重影响程序性能。本文将针对“java poi打开大文件慢的优化方法?”这一问题,探讨几种可行的解决方案,帮助开发者提升程序效率。

问题在于java poi 默认会将整个excel文件加载到内存中,对于大型文件而言,这会导致内存占用过高,甚至出现outofmemoryerror,并极大拖慢读取速度。 因此,需要采用优化策略来解决这个问题。

主要有两种方法可以有效提升读取大文件的效率:

方案一:使用xlsx-streamer实现分段读取

立即学习Java免费学习笔记(深入)”;

xlsx-streamer是一个基于poi的库,它采用分段缓存的方式加载数据,避免一次性将整个文件加载到内存中。通过streamingreader,可以创建一个缓冲区,批量读取文件内容。 这使得程序可以处理远大于内存容量的大型excel文件。

首先需要引入xlsx-streamer的依赖:



    org.apache.poi
    poi-ooxml
    ${poi.version}



    com.monitorjbl
    xlsx-streamer
    2.1.0

以下是一个使用xlsx-streamer读取大型excel文件的示例代码:

MagickPen
MagickPen

在线AI英语写作助手,像魔术师一样在几秒钟内写出任何东西。

下载
    public static void readlagerexcel(file file) throws exception {
        inputstream inputstream = new fileinputstream(file);
        long start = system.currenttimemillis();
        try (workbook workbook = streamingreader.builder()
                .rowcachesize(10 * 10)  //缓存到内存中的行数,默认是10
                .buffersize(1024 * 4)  //读取资源时,缓存到内存的字节大小,默认是1024
                .open(inputstream)) { //打开资源,可以是inputstream或者是file,注意:只能打开.xlsx格式的文件

            sheet sheet = workbook.getsheetat(0);
            log.info("==读取excel完毕,耗时:{}毫秒,", system.currenttimemillis() - start);
            //遍历所有的行
            for (row row : sheet) {
                system.out.println("开始遍历第" + row.getrownum() + "行数据:");
                //遍历所有的列
                for (cell cell : row) {
                    system.out.print(cell.getstringcellvalue() + " ");
                }
                system.out.println(" ");
            }
            //总数
            system.out.println("读取结束行数:" + sheet.getlastrownum());
        }
    }

使用该方法处理40万级别的数据,耗时大约5.4秒。

方案二:使用easyexcel进行优化

easyexcel是阿里巴巴开源的一个基于poi的excel处理工具,它对poi进行了封装和优化,能够有效解决大文件读取时内存溢出的问题。 easyexcel 提供了更高效的读取和写入方式,尤其适合处理海量数据。

需要引入easyexcel的依赖:



    com.alibaba
    easyexcel
    3.1.0

以下是一个简单的easyexcel读取示例:

  public static void readExcelByEasyExcel(File file) {
      long start = System.currentTimeMillis();
      List excelDataList = EasyExcel.read(file).head(ExcelData.class).sheet(0).doReadSync();
      excelDataList.stream().forEach(x -> System.out.println(x.toString()));
      log.info("==读取excel完毕,耗时:{}毫秒,", System.currentTimeMillis() - start);
  }

这两种方案都可以有效提高java poi处理大文件的效率,选择哪种方案取决于具体的应用场景和需求。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
excel对比两列数据异同
excel对比两列数据异同

Excel作为数据的小型载体,在日常工作中经常会遇到需要核对两列数据的情况,本专题为大家提供excel对比两列数据异同相关的文章,大家可以免费体验。

1401

2023.07.25

excel重复项筛选标色
excel重复项筛选标色

excel的重复项筛选标色功能使我们能够快速找到和处理数据中的重复值。本专题为大家提供excel重复项筛选标色的相关的文章、下载、课程内容,供大家免费下载体验。

409

2023.07.31

excel复制表格怎么复制出来和原来一样大
excel复制表格怎么复制出来和原来一样大

本专题为大家带来excel复制表格怎么复制出来和原来一样大相关文章,帮助大家解决问题。

562

2023.08.02

excel表格斜线一分为二
excel表格斜线一分为二

在Excel表格中,我们可以使用斜线将单元格一分为二。本专题为大家带来excel表格斜线一分为二怎么弄的相关文章,希望可以帮到大家。

1243

2023.08.02

excel斜线表头一分为二
excel斜线表头一分为二

excel斜线表头一分为二的方法有使用合并单元格功能方法、使用文本框功能方法、使用自定义格式方法。本专题为大家提供excel斜线表头一分为二相关的各种文章、以及下载和课程。

368

2023.08.02

绝对引用的输入方法
绝对引用的输入方法

绝对引用允许在公式中引用一个固定的单元格,而不会随着公式的复制和粘贴而改变引用的单元格。本专题为大家提供绝对引用相关内容的文章,大家可以免费体验。

4526

2023.08.09

java导出excel
java导出excel

在Java中,我们可以使用Apache POI库来导出Excel文件。本专题提供java导出excel的相关文章,大家可以免费体验。

408

2023.08.18

excel输入值非法
excel输入值非法

在Excel中,当输入的数值非法时,有以下多种处理方法。本专题为大家提供excel输入值非法的相关文章,大家可以免费体验。

1020

2023.08.18

java入门学习合集
java入门学习合集

本专题整合了java入门学习指南、初学者项目实战、入门到精通等等内容,阅读专题下面的文章了解更多详细学习方法。

1

2026.01.29

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
RunnerGo从入门到精通
RunnerGo从入门到精通

共22课时 | 1.7万人学习

尚学堂Mahout视频教程
尚学堂Mahout视频教程

共18课时 | 3.2万人学习

Linux优化视频教程
Linux优化视频教程

共14课时 | 3.1万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号