Java 使用EasyExcel上传文件
导包:
版本根据maven自行选择
<!-- https://mvnrepository.com/artifact/com.alibaba/easyexcel -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>2.1.6</version>
</dependency>
controller方法:
public void upload(){
try {
InputStream file = new FileInputStream("D:\\user.xlsx");
//TestUser 实体类; UserListener 核心内容下文介绍,注意此处的new的内容传入的service
EasyExcel.read(file,TestUser.class,new UserListener(readWriteSeparationService)).sheet().doRead();
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
UserListener类:
此类继承了AnalysisEventListener类泛型为上传的实体类泛型,因为AnalysisEventListener不能被spring的容器管理
所以上文中手动传入Service层
public class UserListener extends AnalysisEventListener<TestUser> {
List<TestUser> list = new ArrayList<>();
private ReadWriteSeparationService readWriteSeparationService;
public UserListener(ReadWriteSeparationService readWriteSeparationService){
this.readWriteSeparationService = readWriteSeparationService;
}
@Override
public void invoke(TestUser date, AnalysisContext analysisContext) {
//把读出来的每一行数据添加到list,若在此处写入逻辑,每一行表格数据都会去连接数据库写入数据
list.add(date);
}
@Override
public void doAfterAllAnalysed(AnalysisContext analysisContext) {
//最终一定会执行的程序
System.out.println(list.size());
//整理好数据直接批量插入
saveDate();
}
public void saveDate(){
for(TestUser a : list){
System.out.println(a.toString());
}
//添加到数据库的逻辑
readWriteSeparationService.addTwo(list);
}
}
总结:
EasyExcel避免了繁琐的读取操作,不需要手动构建实体类数据,避免了组装数据的过程,直接映射到实例类;不足之处欢迎指出