easyExcel流式写文件和非流式写文件,各举一个例子
时间: 2025-07-11 20:06:20 浏览: 3
### EasyExcel 流式写文件与非流式写文件示例代码
以下内容详细说明了如何使用 EasyExcel 进行流式写入和非流式写入文件的两种方式。
---
#### 1. 非流式写入示例
非流式写入适用于数据量较小的情况,直接将所有数据一次性写入到文件中[^1]。
```java
import com.alibaba.excel.EasyExcel;
import java.util.ArrayList;
import java.util.List;
public class NonStreamingWriteExample {
public static void main(String[] args) {
String fileName = "example_non_streaming.xlsx";
// 模拟数据
List<DemoData> dataList = new ArrayList<>();
for (int i = 0; i < 10; i++) {
DemoData data = new DemoData();
data.setString("字符串" + i);
data.setDate(new java.util.Date());
data.setDoubleData(0.56);
dataList.add(data);
}
// 使用非流式写入方式
EasyExcel.write(fileName, DemoData.class)
.sheet("Sheet1")
.doWrite(dataList); // 将数据一次性写入文件
}
}
// 数据模型类
class DemoData {
private String string;
private java.util.Date date;
private Double doubleData;
// Getter 和 Setter 方法
public String getString() {
return string;
}
public void setString(String string) {
this.string = string;
}
public java.util.Date getDate() {
return date;
}
public void setDate(java.util.Date date) {
this.date = date;
}
public Double getDoubleData() {
return doubleData;
}
public void setDoubleData(Double doubleData) {
this.doubleData = doubleData;
}
}
```
上述代码通过 `doWrite()` 方法实现非流式写入,所有数据会被一次性写入到文件中[^1]。
---
#### 2. 流式写入示例
流式写入适用于处理大文件或大量数据,它逐批写入数据,避免占用过多内存。
```java
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.write.handler.WriteHandler;
import java.util.ArrayList;
import java.util.List;
public class StreamingWriteExample {
public static void main(String[] args) {
String fileName = "example_streaming.xlsx";
// 使用流式写入方式
EasyExcel.write(fileName, DemoData.class)
.registerWriteHandler(new LongestMatchColumnWidthStyleStrategy()) // 自动调整列宽
.sheet("Sheet1")
.doWrite(data()); // 分批写入数据
}
private static List<DemoData> data() {
List<DemoData> list = new ArrayList<>();
for (int i = 0; i < 10000; i++) { // 模拟大量数据
DemoData data = new DemoData();
data.setString("字符串" + i);
data.setDate(new java.util.Date());
data.setDoubleData(0.56);
list.add(data);
// 模拟分批写入
if (i % 1000 == 0 && i != 0) {
yieldAndClear(list); // 清空当前批次数据
list = new ArrayList<>(); // 创建新的批次
}
}
return list;
}
private static void yieldAndClear(List<DemoData> list) {
// 在实际应用中,可以在此处执行额外逻辑,例如日志记录等
list.clear(); // 清空列表以释放内存
}
}
// 数据模型类(同上)
class DemoData {
private String string;
private java.util.Date date;
private Double doubleData;
// Getter 和 Setter 方法(同上)
public String getString() {
return string;
}
public void setString(String string) {
this.string = string;
}
public java.util.Date getDate() {
return date;
}
public void setDate(java.util.Date date) {
this.date = date;
}
public Double getDoubleData() {
return doubleData;
}
public void setDoubleData(Double doubleData) {
this.doubleData = doubleData;
}
}
```
上述代码通过 `doWrite()` 方法实现流式写入,并结合 `yieldAndClear` 方法模拟分批写入数据的过程。这种方式特别适合处理大数据量场景。
---
#### 3. 写入时的自定义样式
在写入文件时,可以通过注册 `WriteHandler` 来实现自定义样式,例如自动调整列宽[^1]。
```java
EasyExcel.write(fileName, DemoData.class)
.registerWriteHandler(new LongestMatchColumnWidthStyleStrategy()) // 自动调整列宽
.sheet("Sheet1")
.doWrite(dataList);
```
---
#### 4. 注意事项
- **依赖引入**:确保项目中已引入 EasyExcel 的相关依赖。
```xml
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>3.0.5</version>
</dependency>
```
- **性能优化**:对于大数据量写入,推荐使用流式写入以减少内存占用。
- **异常处理**:在实际开发中,需对可能的异常(如文件路径错误、数据格式不匹配等)进行捕获和处理[^1]。
---
###
阅读全文
相关推荐


















