項目要求導入excel, 但是文件很大,一次性讀進去會導致內存不足而報錯,
下面是我解決的方法:
首先倒入需要的jar
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.17</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml-schemas</artifactId>
<version>3.17</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.17</version>
</dependency>
<dependency>
<groupId>com.monitorjbl</groupId>
<artifactId>xlsx-streamer</artifactId>
<version>1.2.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.poi/openxml4j -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>openxml4j</artifactId>
<version>1.0-beta</version>
</dependency>
//報這個錯需要引下面這個jar包
Exception in thread "main" java.lang.NoClassDefFoundError: org/w3c/dom/ElementTraversal
<dependency>
<groupId>xml-apis</groupId>
<artifactId>xml-apis</artifactId>
<version>1.4.01</version>
</dependency>
借助第三方工具:StreamingReader
package com.quanzhen.test;
import com.monitorjbl.xlsx.StreamingReader;
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 java.io.FileInputStream;
/**
* Created by Administrator on 2019/5/21 0021.
*/
public class Utf8Util {
public static void testLoad() throws Exception{
FileInputStream in = new FileInputStream("C:/Users/Administrator/Desktop/Dm_Mobile.xlsx");
Workbook wk = StreamingReader.builder()
.rowCacheSize(100) //緩存到內存中的行數,默認是10
.bufferSize(4096) //讀取資源時,緩存到內存的字節大小,默認是1024
.open(in); //打開資源,必須,可以是InputStream或者是File,注意:只能打開XLSX格式的文件
Sheet sheet = wk.getSheetAt(0);
//遍歷所有的行
for (Row row : sheet) {
System.out.println("開始遍歷第" + row.getRowNum() + "行數據:");
//遍歷所有的列
for (Cell cell : row) {
System.out.print(cell.getStringCellValue() + " ");
}
System.out.println(" ");
}
}
public static void main(String[] args) throws Exception {
testLoad();
}
}
剛開始報版本不支持52.0,網上說是因為我用的jdk是1.7的,要更新成1.8的,換成1.8的之后,還是一大堆錯誤,主要是因為
jar包沒有全部導入,還有一個原因就是版本不一致,要是4.0都是4.0要是3.8都是3.8,
全部導入之后,把jdk切換成1.7和1.8,發現兩個都是可以的,並不是jdk版本問題