广东省建设合同备案网站,如何让wordpress重新安装,医院的网络推广方案,手机酒店网站建设笔者之前一直使用POI读写Excel文件#xff0c;最近有个需求需要读取大概80万行数据的Excel#xff0c;使用POI读取到10.2万行左右就卡死不动了#xff0c;而且CPU占用直接拉满到100%#xff0c;内存占用也很高。
查找资料后#xff0c;发现POI提供了读取大量数据的方法最近有个需求需要读取大概80万行数据的Excel使用POI读取到10.2万行左右就卡死不动了而且CPU占用直接拉满到100%内存占用也很高。
查找资料后发现POI提供了读取大量数据的方法但是用起来比较复杂。同时看到有人提到用EasyExcel读取Excel的速度快资源占用少。于是换成EasyExcel去读取那个80万行数据的Excel发现读取速度确实很快CPU和内存占用也很少。
然而EasyExcel的官方文档中最简单的读写代码都是默认与数据库有交互写了一些分页读写数据库的代码还是不够简洁。所以个人参考EasyExcel的官方文档写了一个更加简洁、清晰的使用EasyExcel读取Excel的样例。 1.在pom.xml中添加POI相关依赖 !-- easyexcel --dependencygroupIdcom.alibaba/groupIdartifactIdeasyexcel-core/artifactIdversion3.3.2/version/dependency2.实体类
package com.example.study.entity;import com.alibaba.excel.annotation.ExcelProperty;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Getter;
import lombok.Setter;import java.util.Date;Getter
Setter
public class StudentEntity {ExcelProperty(value id, order 1)private Integer id;ExcelProperty(value 生日, order 4)JsonFormat(pattern yyyy-MM-dd HH:mm:ss, timezone GMT8)private Date birthday;ExcelProperty(value 名字, order 2)private String name;ExcelProperty(value 性别, order 3)private String sex;
}3.读取Excel的类
package com.example.study.common;import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.read.listener.ReadListener;
import com.alibaba.fastjson.JSON;
import com.example.study.entity.StudentEntity;
import lombok.extern.slf4j.Slf4j;import java.util.ArrayList;
import java.util.List;Slf4j
public class EasyExcelDemo {public static void main(String[] args) {String readExcel F:\\tmp\\students.xlsx;String writeExcel F:\\tmp\\students-write.xlsx;ListStudentEntity list read(readExcel);write(writeExcel, list);}private static void write(String fileName, ListStudentEntity list) {EasyExcel.write(fileName).head(StudentEntity.class).sheet(EasyExcel Writed 1).doWrite(list);}private static ListStudentEntity read(String excel) {ListStudentEntity list new ArrayList();EasyExcel.read(excel).head(StudentEntity.class).sheet(1).registerReadListener(new ReadListenerStudentEntity() {Overridepublic void invoke(StudentEntity entity, AnalysisContext analysisContext) {list.add(entity);System.out.println(每读取到一行数据就会执行该方法: JSON.toJSONString(entity));}Overridepublic void doAfterAllAnalysed(AnalysisContext analysisContext) {System.out.println(所有数据读取完成后执行该方法);}}).doRead();return list;}
}