上传后另起线程读取会出错
java.lang.IllegalStateException: File has been moved - cannot be read again
at org.springframework.web.multipart.commons.CommonsMultipartFile.getInputStream(CommonsMultipartFile.java:124)
at com.zjg.bfs.web.inform.web.InformTemplateController$2.run(InformTemplateController.java:376)
at java.lang.Thread.run(Thread.java:745)
快速开始
https://github.com/alibaba/easyexcel/blob/master/quickstart.md
EasyExcel 使用
- 引入版本
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>1.1.1</version>
</dependency>
- 监听器
public class ExcelListener extends AnalysisEventListener<ArrayList> {
//自定义用于暂时存储data。
//可以通过实例获取该值
private List<ArrayList> datas = new ArrayList();
@Override
public void invoke(ArrayList object, AnalysisContext context) {
System.out.println("当前行:" + context.getCurrentRowNum());
System.out.println(object);
datas.add(object);//数据存储到list,供批量处理,或后续自己业务逻辑处理。
doSomething(object);//根据自己业务做处理
}
private void doSomething(Object object) {
//1、入库调用接口
}
@Override
public void doAfterAllAnalysed(AnalysisContext context) {
// datas.clear();//解析结束销毁不用的资源
}
public List<ArrayList> getDatas() {
return datas;
}
public void setDatas(List<ArrayList> datas) {
this.datas = datas;
}
}
- 方法调用
InputStream is = new FileInputStream("D:\\java\\test1.xlsx");
InputStream inputStream = new BufferedInputStream(is);
try {
// 解析每行结果在listener中处理
ExcelListener listener = new ExcelListener();
ExcelReader reader = new ExcelReader(inputStream, null, listener, true);
reader.read(new Sheet(1, 1));
List<ArrayList> datas = listener.getDatas();
for (ArrayList data : datas) {
System.out.println("datas ->" + data.get(0) + "=====" + data.get(1) + "====" + data.get(2));
}
} catch (Exception e) {
System.out.println(e.toString());
} finally {
try {
inputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
问题参考
https://www.cnblogs.com/nm666/p/10713765.html
https://blog.youkuaiyun.com/alex_xfboy/article/details/84844667
https://github.com/alibaba/easyexcel/blob/master/quickstart.md