EasyExcel接收多个文件怎么遍历
时间: 2023-11-22 14:10:47 浏览: 48
如果你想要遍历多个 Excel 文件,可以采用如下的方式:
1. 使用 `File` 类获取要遍历的文件夹路径。
2. 使用 `File` 类的 `listFiles()` 方法获取该文件夹下的所有文件。
3. 遍历所有文件,使用 EasyExcel 的读取方法读取数据。
下面是示例代码:
```java
String folderPath = "path/to/folder";
File folder = new File(folderPath);
File[] files = folder.listFiles();
for (File file : files) {
// 判断文件是否为 Excel 文件,可以使用文件名后缀进行判断
if (file.isFile() && file.getName().endsWith(".xlsx")) {
// 使用 EasyExcel 读取 Excel 文件中的数据
List<Object> list = EasyExcel.read(file).sheet().doReadSync();
// 处理数据
// ...
}
}
```
注意,如果要读取多个 Excel 文件的数据,建议使用 `doReadSync()` 方法同步读取数据,避免内存溢出的问题。同时也建议在处理完每个文件的数据后及时释放资源,避免占用过多的内存。
相关问题
EasyExcel 并行写多个文件
如果要使用 EasyExcel 进行并行写多个 Excel 文件,可以按照以下步骤进行:
1. 创建多个 ExcelWriter 对象,并设置要写入的文件路径和 sheet 名称。
2. 创建多个 WriteSheet 对象,并设置要写入的数据类型和写入数据的起始行号。
3. 创建多个 WriteTable 对象,并设置要写入的数据列表和表头。
4. 使用多线程方式向 WriteTable 中写入数据。
5. 关闭所有 ExcelWriter 对象,释放资源。
下面是一个示例代码:
```java
// 创建 ExcelWriter 对象列表
List<ExcelWriter> writerList = new ArrayList<>();
for (int i = 0; i < fileCount; i++) {
ExcelWriter writer = EasyExcel.write(filePathList.get(i)).build();
writerList.add(writer);
}
// 创建 WriteSheet 对象列表
List<WriteSheet> sheetList = new ArrayList<>();
for (int i = 0; i < fileCount; i++) {
WriteSheet sheet = EasyExcel.writerSheet(sheetName).build();
sheetList.add(sheet);
}
// 创建 WriteTable 对象列表
List<WriteTable> tableList = new ArrayList<>();
for (int i = 0; i < fileCount; i++) {
WriteTable table = EasyExcel.writerTable(startRow, dataType).head(head).build();
tableList.add(table);
}
// 多线程方式写入数据
List<List<Object>> dataList = getDataList(); // 获取要写入的数据列表
ThreadPoolExecutor executor = new ThreadPoolExecutor(5, 10, 60, TimeUnit.SECONDS, new LinkedBlockingQueue<>());
for (int i = 0; i < fileCount; i++) {
int index = i;
executor.execute(() -> {
List<Object> data = getData(index, dataList); // 获取要写入的数据
tableList.get(index).writeRow(data);
});
}
executor.shutdown();
while (!executor.awaitTermination(1, TimeUnit.SECONDS)) {
// 等待线程池中的任务执行完毕
}
// 关闭所有 ExcelWriter 对象
for (ExcelWriter writer : writerList) {
writer.finish();
}
```
在上面的代码中,fileCount 表示要写入的 Excel 文件个数,filePathList 表示要写入的文件路径列表,其他变量的含义和上一个问题中的示例代码相同。在多线程写入数据时,需要根据线程的编号获取对应的数据和 WriteTable 对象。最后,需要依次关闭所有 ExcelWriter 对象。
easyexcel读取文件多个模板
EasyExcel可以通过创建多个读取器对象来实现读取多个模板文件,每个读取器对象对应一个模板文件。具体实现步骤如下:
1. 引入EasyExcel依赖包
```xml
<!-- EasyExcel依赖包 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>2.3.0</version>
</dependency>
```
2. 创建多个读取器对象
```java
// 创建读取器对象1,读取模板文件1
ExcelReader excelReader1 = EasyExcel.read(new FileInputStream("模板文件1.xlsx"), 数据类1.class, new 数据读取器1()).build();
// 创建读取器对象2,读取模板文件2
ExcelReader excelReader2 = EasyExcel.read(new FileInputStream("模板文件2.xlsx"), 数据类2.class, new 数据读取器2()).build();
```
3. 启动读取器对象
```java
// 启动读取器对象1
excelReader1.read();
// 启动读取器对象2
excelReader2.read();
```
完整示例代码如下:
```java
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.ExcelReader;
import com.alibaba.excel.read.metadata.ReadSheet;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
public class 多个模板读取器 {
public static void main(String[] args) throws FileNotFoundException {
// 创建读取器对象1,读取模板文件1
ExcelReader excelReader1 = EasyExcel.read(new FileInputStream("模板文件1.xlsx"), 数据类1.class, new 数据读取器1()).build();
// 创建读取器对象2,读取模板文件2
ExcelReader excelReader2 = EasyExcel.read(new FileInputStream("模板文件2.xlsx"), 数据类2.class, new 数据读取器2()).build();
// 启动读取器对象1
excelReader1.read();
// 启动读取器对象2
excelReader2.read();
}
// 定义数据类1
public static class 数据类1 {
private String 字段1;
private String 字段2;
public String get字段1() {
return 字段1;
}
public void set字段1(String 字段1) {
this.字段1 = 字段1;
}
public String get字段2() {
return 字段2;
}
public void set字段2(String 字段2) {
this.字段2 = 字段2;
}
}
// 定义数据读取器1
public static class 数据读取器1 extends MyReadListener<数据类1> {
@Override
public void onSheet(int sheetNo, ReadSheet readSheet) {
System.out.println("开始读取模板文件1的第" + (sheetNo + 1) + "个工作表:" + readSheet.getSheetName());
}
@Override
public void onReadRowData(int sheetNo, int rowIndex, 数据类1 rowData) {
System.out.println("读取模板文件1的第" + (sheetNo + 1) + "个工作表的第" + (rowIndex + 1) + "行数据:" + rowData);
}
}
// 定义数据类2
public static class 数据类2 {
private String 字段1;
private String 字段2;
private String 字段3;
public String get字段1() {
return 字段1;
}
public void set字段1(String 字段1) {
this.字段1 = 字段1;
}
public String get字段2() {
return 字段2;
}
public void set字段2(String 字段2) {
this.字段2 = 字段2;
}
public String get字段3() {
return 字段3;
}
public void set字段3(String 字段3) {
this.字段3 = 字段3;
}
}
// 定义数据读取器2
public static class 数据读取器2 extends MyReadListener<数据类2> {
@Override
public void onSheet(int sheetNo, ReadSheet readSheet) {
System.out.println("开始读取模板文件2的第" + (sheetNo + 1) + "个工作表:" + readSheet.getSheetName());
}
@Override
public void onReadRowData(int sheetNo, int rowIndex, 数据类2 rowData) {
System.out.println("读取模板文件2的第" + (sheetNo + 1) + "个工作表的第" + (rowIndex + 1) + "行数据:" + rowData);
}
}
// 定义数据读取监听器
public static abstract class MyReadListener<T> extends MyReadSimpleListener<T> {
@Override
public void onSheetFinish(int sheetNo) {
System.out.println("模板文件的第" + (sheetNo + 1) + "个工作表读取完毕。");
}
}
// 定义简单数据读取监听器
public static abstract class MyReadSimpleListener<T> extends com.alibaba.excel.read.listener.ReadListenerAdapter<T> {
@Override
public void onException(Exception exception) {
System.err.println("读取数据发生异常:" + exception.getMessage());
}
}
}
```