Java POI 读取 大数据量的Excel 实操

Java POI 读取 大数据量(超过10W行)的excel的操作

0.问题抛出

在使用poi 进行excel文件读取操作的时候,
如果文件包含的数据量很大,比如包含了10万行的数据,
那么在使用  【Workbook workbook2 = WorkbookFactory.create(inputStrem);】 
这种形式读取的时候就会发现异常的慢,甚至是内存都要溢出了还是没有读取出来。
问题原因就是,上述的方式 是一下子将文件全部加载进入内存中,自然需要消耗许多的内存资源和时间。
为了解决上述问题,特记录如下方式。
下面的方式思路就是 : 批量的去加载数据,降低内存的消耗,从而实现程序的流畅运行。

1.说明

1.本文记录了Java在读取包含大数据量的excel的时候的操作,
2.此处的大数据量指的是excle中包含了较多的行数,比如包含了10万行的数据;
3.本文记录的方式只适用于【读取】excel的内容;
4.本文记录的方式只适用于【.xlsx】为后缀的excel文件。

2.引入依赖


        <!-- excel工具 -->
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml</artifactId>
            <version>4.1.2</version>
        </dependency>

        <!-- 读取大量excel数据时使用到的两个 -->
        <dependency>
            <groupId>com.monitorjbl</groupId>
            <artifactId>xlsx-streamer</artifactId>
            <version>2.1.0</version>
        </dependency>
        <dependency>
            <groupId>xml-apis</groupId>
            <artifactId>xml-apis</artifactId>
            <version>1.4.01</version>
        </dependency>

3.案例代码

    public void importExcelData()throws  Exception{
    	// 指定文件的路径
        String filePath = "aa.xlsx";
        // 创建输入流对象
        FileInputStream fileInputStream = new FileInputStream(new File(filePath));
        // 【核心操作】 : 使用下面的方式来获取 Workbook 对象
        Workbook workbook = StreamingReader.builder()
                .bufferSize(4096) // 设置缓存的大小
                .rowCacheSize(100) // 缓存行的数量,也就是每次读取多少行到内存中,而不是一下子全都加载进内存
                .open(fileInputStream); // 设置要打开的文件
        Sheet sheet = workbook.getSheetAt(0);

        //遍历所有的行进行文件的读取
        for (Row row : sheet) {
          // 遍历每一行的数据
          for(Cell cell : row){
          		 System.out.println(cell.getStringCellValue() +" ");
          		 
          		 // 此时已经读取到了 某一行的某一列的数据
          		 // 在这里就可以填充自己具体的业务逻辑了
          		 
          	
		  }
		   System.out.println(" ");
        }
        fileInputStream.close();
    }

4.运行即可

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值