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()); } } } ```

相关推荐

最新推荐

recommend-type

阿里EasyExcel的操作.pdf

easyexcel重写了poi对07版Excel的解析,能够原本一个3M的excel用POI sax依然需要100M左右内存降低到几M,并且再大的excel不会出现内存溢出,03版依赖POI的sax模式。在上层做了模型转换的封装,让使用者更加简单方便
recommend-type

基于STC32单片机内部RTC的学习计时器+全部资料+详细文档(高分项目).zip

【资源说明】 基于STC32单片机内部RTC的学习计时器+全部资料+详细文档(高分项目).zip基于STC32单片机内部RTC的学习计时器+全部资料+详细文档(高分项目).zip 【备注】 1、该项目是个人高分项目源码,已获导师指导认可通过,答辩评审分达到95分 2、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 3、本项目适合计算机相关专业(人工智能、通信工程、自动化、电子信息、物联网等)的在校学生、老师或者企业员工下载使用,也可作为毕业设计、课程设计、作业、项目初期立项演示等,当然也适合小白学习进阶。 4、如果基础还行,可以在此代码基础上进行修改,以实现其他功能,也可直接用于毕设、课设、作业等。 欢迎下载,沟通交流,互相学习,共同进步!
recommend-type

2023新型智慧城市智慧交通专项设计方案[498页Word].docx

2023新型智慧城市智慧交通专项设计方案[498页Word].docx
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

实现实时数据湖架构:Kafka与Hive集成

![实现实时数据湖架构:Kafka与Hive集成](https://img-blog.csdnimg.cn/img_convert/10eb2e6972b3b6086286fc64c0b3ee41.jpeg) # 1. 实时数据湖架构概述** 实时数据湖是一种现代数据管理架构,它允许企业以低延迟的方式收集、存储和处理大量数据。与传统数据仓库不同,实时数据湖不依赖于预先定义的模式,而是采用灵活的架构,可以处理各种数据类型和格式。这种架构为企业提供了以下优势: - **实时洞察:**实时数据湖允许企业访问最新的数据,从而做出更明智的决策。 - **数据民主化:**实时数据湖使各种利益相关者都可
recommend-type

list根据id查询pid 然后依次获取到所有的子节点数据

可以使用递归的方式来实现根据id查询pid并获取所有子节点数据。具体实现可以参考以下代码: ``` def get_children_nodes(nodes, parent_id): children = [] for node in nodes: if node['pid'] == parent_id: node['children'] = get_children_nodes(nodes, node['id']) children.append(node) return children # 测试数
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。
recommend-type

"互动学习:行动中的多样性与论文攻读经历"

多样性她- 事实上SCI NCES你的时间表ECOLEDO C Tora SC和NCESPOUR l’Ingén学习互动,互动学习以行动为中心的强化学习学会互动,互动学习,以行动为中心的强化学习计算机科学博士论文于2021年9月28日在Villeneuve d'Asq公开支持马修·瑟林评审团主席法布里斯·勒菲弗尔阿维尼翁大学教授论文指导奥利维尔·皮耶昆谷歌研究教授:智囊团论文联合主任菲利普·普雷教授,大学。里尔/CRISTAL/因里亚报告员奥利维耶·西格德索邦大学报告员卢多维奇·德诺耶教授,Facebook /索邦大学审查员越南圣迈IMT Atlantic高级讲师邀请弗洛里安·斯特鲁布博士,Deepmind对于那些及时看到自己错误的人...3谢谢你首先,我要感谢我的两位博士生导师Olivier和Philippe。奥利维尔,"站在巨人的肩膀上"这句话对你来说完全有意义了。从科学上讲,你知道在这篇论文的(许多)错误中,你是我可以依
recommend-type

实现实时监控告警系统:Kafka与Grafana整合

![实现实时监控告警系统:Kafka与Grafana整合](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9tbWJpei5xcGljLmNuL21tYml6X2pwZy9BVldpY3ladXVDbEZpY1pLWmw2bUVaWXFUcEdLT1VDdkxRSmQxZXB5R1lxaWNlUjA2c0hFek5Qc3FyRktudFF1VDMxQVl3QTRXV2lhSWFRMEFRc0I1cW1ZOGcvNjQw?x-oss-process=image/format,png) # 1.1 Kafka集群架构 Kafka集群由多个称为代理的服务器组成,这