上次简述了使用poi读取大xls文件,这里说下读取xlsx格式的文件的方法
环境模拟
先准备一个大的excel文件(xlsx大小5M),再将jvm的heap缩小到100m(JVM 参数 -Xmx100m)用于模拟OOM
并使用参数在OOM时dump内存 -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=d://dump.hprof
使用XSSF读取
在gradle中引入解析xlsx需要的jar包
compile 'org.apache.poi:poi:3.15'
compile 'org.apache.poi:poi-ooxml:3.15'
compile 'xerces:xercesImpl:2.11.0'
之后读取xlsx文件
public static void main(String [] args) throws IOException {
InputStream is = new FileInputStream("d://large.xlsx");
Workbook wb = new XSSFWorkbook(is);
}
运行之后
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
at java.util.Arrays.copyOf(Arrays.java:3236)
at java.io.ByteArrayOutputStream.toByteArray(ByteArrayOutputStream.java:178)
at org.apache.poi.openxml4j.