public void handleExploreFile(MultipartFile file) throws IOException {
EasyExcel.read(file.getInputStream(), new AnalysisEventListener<Map<Integer, String>>() {
/**
* 每隔5条存储数据库,实际使用中可以3000条,然后清理list ,方便内存回收
*/
private static final int BATCH_COUNT = 5;
List<Map<Integer, String>> list = new ArrayList<>();
@Override
public void invoke(Map<Integer, String> data, AnalysisContext context) {
log.info("解析到一条数据:{}", JSON.toJSONString(data));
list.add(data);
if (list.size() >= BATCH_COUNT) {
saveData();
list.clear();
}
}
@Override
public void invokeHeadMap(Map<Integer, String> headMap, AnalysisContext context) {
JSON.toJSONString(headMap);
}
@Override
public void doAfterAllAnalysed(AnalysisContext context) {
saveData();
log.info("所有数据解析完成!");
}
/**
* 加上存储数据库
*/
private void saveData() {
log.info("{}条数据,开始存储数据库!", list.size());
log.info("存储数据库成功!");
}
}).sheet().doRead();
}
获得所有数据 在AnalysisEventListener#saveData方法处 处理 list ;
获得head 在AnalysisEventListener#invokeHeadMap方法处 headMap为需要的标题,可以将其赋给外部变量进行处理;