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>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
3.案例代码
public void importExcelData()throws Exception{
String filePath = "aa.xlsx";
FileInputStream fileInputStream = new FileInputStream(new File(filePath));
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();
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
4.运行即可