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.引入依赖


        
        <dependency>
            <groupId>org.apache.poigroupId>
            <artifactId>poi-ooxmlartifactId>
            <version>4.1.2version>
        dependency>

        
        <dependency>
            <groupId>com.monitorjblgroupId>
            <artifactId>xlsx-streamerartifactId>
            <version>2.1.0version>
        dependency>
        <dependency>
            <groupId>xml-apisgroupId>
            <artifactId>xml-apisartifactId>
            <version>1.4.01version>
        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.运行即可

你可能感兴趣的:(JAVA基础篇,java,excel,poi,大数据量,文件读写)