4
异常代码
这里写你的代码
异常提示 请提供完整的异常提示,记住是全部异常! 建议描述
异常代码
这里写你的代码
异常提示 请提供完整的异常提示,记住是全部异常! 建议描述
以下代码来自官方教程修改:
DemoDataListener.java
// 有个很重要的点 DemoDataListener 不能被spring管理,要每次读取excel都要new,然后里面用到spring可以构造方法传进去
public class DemoDataListener extends AnalysisEventListener<Data> {
private static final Logger LOGGER = LoggerFactory.getLogger(DemoDataListener.class);
/**
* 每隔5条存储数据库,实际使用中可以3000条,然后清理list ,方便内存回收
*/
private static final int BATCH_COUNT = 5;
private List<Data> list = new ArrayList<>();
private int successCount = 0;
private int errorCount = 0;
/**
* 这个每一条数据解析都会来调用
*
* @param data
* one row value. Is is same as {@link AnalysisContext#readRowHolder()}
* @param context
*/
@Override
public void invoke(Data data, AnalysisContext context) {
//这里的是否成功判断条件取决于业务逻辑
if (data.getActive()) {
successCount++;
list.add(data);
} else {
errorCount++;
}
}
/**
* 所有数据解析完成了 都会来调用
*
* @param context
*/
@Override
public void doAfterAllAnalysed(AnalysisContext context) {
LOGGER.info("所有数据解析完成!");
}
public List<Data> getList() {
return list;
}
public void setList(List<Data> list) {
this.list = list;
}
public int getSuccessCount() {
return successCount;
}
public void setSuccessCount(int successCount) {
this.successCount = successCount;
}
public int getErrorCount() {
return errorCount;
}
public void setErrorCount(int errorCount) {
this.errorCount = errorCount;
}
}
业务逻辑部分
/**
* 最简单的读
* <p>1. 创建excel对应的实体对象 参照{@link Data}
* <p>2. 由于默认异步读取excel,所以需要创建excel一行一行的回调监听器,参照{@link DemoDataListener}
* <p>3. 直接读即可
*/
@Test
public void simpleRead() {
// 有个很重要的点 DemoDataListener 不能被spring管理,要每次读取excel都要new,然后里面用到spring可以构造方法传进去
// 写法1:
// 这里 需要指定读用哪个class去读,然后读取第一个sheet 文件流会自动关闭
final DemoDataListener readListener = new DemoDataListener();
EasyExcel.read(fileName, Data.class, readListener).sheet().doRead();
log.info("successCount={}", readListener.getSuccessCount());
log.info("errorCount={}", readListener.getErrorCount());
log.info("list={}", readListener.getList());
// 写法2:
final DemoDataListener readListener2 = new DemoDataListener();
ExcelReader excelReader = EasyExcel.read(fileName, Data.class, readListener2).build();
ReadSheet readSheet = EasyExcel.readSheet(0).build();
excelReader.read(readSheet);
// 这里千万别忘记关闭,读的时候会创建临时文件,到时磁盘会崩的
excelReader.finish();
log.info("successCount={}", readListener2.getSuccessCount());
log.info("errorCount={}", readListener2.getErrorCount());
log.info("list={}", readListener2.getList());
}
官方提供了两种写法,取其中一种即可
Listener可以实例化,其中定义几个属性值,分别存放文件读取过程中的信息,文件读完后可以通过实例化的Listener拿到文件读取过程中的所有信息
楼上写的恒详细了。感谢。