使用easyExcel读取100w条数据,/如何分批读取
时间: 2025-04-04 13:00:45 浏览: 74
EasyExcel 是阿里巴巴开源的一个基于 Java 的 Excel 处理工具,它通过事件模型实现了对大数据量的高效处理。对于需要一次性加载大量数据(如 100W 条记录)的情况,直接将所有数据放入内存可能会导致性能问题甚至 OOM(OutOfMemoryError)。因此,使用 EasyExcel 提供的分批读取功能是非常必要的。
### 分批读取的核心原理
EasyExcel 支持监听模式,在解析每一行时会触发 `AnalysisEventListener` 中的相关方法。我们可以利用这个特性自定义实现批量存储业务逻辑,并且不会把整个文件的所有内容都放到内存里。
以下是详细步骤:
#### 步骤 1:引入依赖项
首先确保项目中已经添加了 easyexcel 相关 Maven 或 Gradle 依赖:
```xml
<!-- 引入 easyexcel -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>{latest_version}</version>
</dependency>
```
#### 步骤 2:创建对应的实体类
假设我们要导入的数据结构如下所示:
| name | age |
|------|-----|
| 张三 | 18 |
那么可以先编写一个 POJO 类作为映射载体:
```java
public class UserData {
private String name;
private Integer age;
// 省略 Getter 和 Setter 方法
}
```
这里需要注意字段名称最好与表格列名保持一致;如果存在差异可通过注解 @Column 定义对应关系。
#### 步骤 3:定制化 Listener 实现分页操作
重写 AnalysisEventListener 接口的主要方法,例如每次达到指定大小就执行保存动作等。
```java
import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
import java.util.ArrayList;
import java.util.List;
public class MyDataListener extends AnalysisEventListener<UserData> {
private static final int BATCH_COUNT = 500; // 每次处理的数量
List<UserData> tempList = new ArrayList<>();
/**
* 这个每一条数据解析都会来调用一次该方法
*/
@Override
public void invoke(UserData data, AnalysisContext context) {
tempList.add(data);
if (tempList.size() >= BATCH_COUNT){
saveBatch(tempList);
tempList.clear();
}
}
/**
所有数据解析完成后的回调函数
*/
@Override
public void doAfterAllAnalysed(AnalysisContext context) {
if (!tempList.isEmpty()){
saveBatch(tempList);
}
}
/**
具体保存到数据库或者其他地方的操作
**/
private void saveBatch(List<UserData> list){
System.out.println("正在保存一批数据..." +list.size());
// 假设这里是实际插入 DB 的过程...
}
}
```
#### 步骤 4:开始正式读取文档并应用 listener
最后一步就是在主程序内启动 EasyExcel 并传入我们刚刚设计好的 listener 对象即可:
```java
String fileName = "path/to/large_data.xlsx";
// 开始读取 excel 文件
EasyExcel.read(fileName,new MyDataListener()).sheet().doRead();
System.out.println("全部数据已成功按批次读取完毕!");
```
至此我们就完成了易用性强、占用资源少的大规模 Excel 数据逐片扫描任务!
阅读全文
相关推荐
















