EasyExcel停更?FastExcel无缝迁移!
- 2026-09-24 07:24:53
EasyExcel停更?FastExcel无缝迁移!
📌 收藏本文,随时回顾精彩观点❤️ 分享给需要的朋友,一起成长🌟 关注随时查看不迷路,获取网盘学习资料
Java开发者谁还没用过EasyExcel处理Excel文件呢?轻量、低内存的优势让它成为项目首选!但自从EasyExcel宣布停止维护后😮,不少小伙伴可能担心后续迭代问题。然而,原作者带着升级版框架FastExcel强势回归🌟!完全兼容EasyExcel的所有功能,迁移成本几乎为零。
一、FastExcel亮点✨
• 📌 完全兼容EasyExcel:API风格、功能特性一脉相承,迁移无压力 • 🚀 性能优化升级:延续低内存设计,处理大文件更流畅 • 🆓 开源免费:无商业授权顾虑,放心用于项目开发 • 🔧 迁移成本极低:仅需修改依赖和包名,代码逻辑无需改动
二、快速上手FastExcel📝
2.1 环境准备:添加依赖
首先在pom.xml中引入FastExcel依赖,同时搭配SpringBoot基础依赖(非必须,纯Java项目可省略):
<!-- FastExcel核心依赖 --><dependency> <groupId>cn.idev.excel</groupId> <artifactId>fastexcel</artifactId> <version>1.3.0</version></dependency><!-- SpringBoot Web依赖(用于接口测试) --><dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId></dependency><dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId></dependency>2.2 定义实体类:映射Excel表头
使用@ExcelProperty注解绑定Excel列名,和EasyExcel的用法完全一致:
import cn.idev.excel.annotation.ExcelProperty;import lombok.Data;@Datapublic class User { @ExcelProperty("主键") // 对应Excel表头"主键" private Integer id; @ExcelProperty("姓名") // 对应Excel表头"姓名" private String name; @ExcelProperty("年龄") // 对应Excel表头"年龄" private Integer age;}2.3 创建监听器:逐行处理读取的数据
FastExcel通过事件监听器实现逐行读取,避免大文件内存溢出:
import cn.idev.excel.context.AnalysisContext;import cn.idev.excel.event.AnalysisEventListener;import java.util.ArrayList;import java.util.List;/** * 通用Excel监听器,支持泛型 */public class BaseExcelListener<T> extends AnalysisEventListener<T> { // 存储读取到的数据列表 private List<T> dataList = new ArrayList<>(); // 每读取一行数据触发 @Override public void invoke(T t, AnalysisContext analysisContext) { dataList.add(t); // 数据存入列表 } // 所有数据读取完成后触发 @Override public void doAfterAllAnalysed(AnalysisContext analysisContext) { System.out.println("🎉 Excel读取完成,共读取" + dataList.size() + "条数据"); } // 获取读取到的数据列表 public List<T> getDataList() { return dataList; }}2.4 功能实现:读写Excel
2.4.1 写入Excel(下载功能)
通过接口响应实现Excel文件下载,代码简洁直观:
import org.springframework.http.HttpStatus;import org.springframework.http.ResponseEntity;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.PostMapping;import org.springframework.web.bind.annotation.RequestParam;import org.springframework.web.multipart.MultipartFile;import javax.servlet.http.HttpServletResponse;import java.io.IOException;import java.net.URLEncoder;import java.util.List;@RestControllerpublic class ExcelController { // Excel下载 @GetMapping("/downloadExcel") public void downloadExcel(HttpServletResponse response) throws IOException { // 设置响应头信息 response.setContentType("application/vnd.ms-excel;charset=UTF-8"); String fileName = URLEncoder.encode("用户", "UTF-8"); // 解决浏览器下载文件名乱码问题 response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx"); // 写入Excel并响应给前端 FastExcel.write(response.getOutputStream(), User.class) .sheet("用户列表") // Excel工作表名称 .doWrite(buildTestData()); // 写入测试数据 } // 构建测试数据 private List<User> buildTestData() { User user1 = new User(); user1.setId(1); user1.setName("张三"); user1.setAge(26); User user2 = new User(); user2.setId(2); user2.setName("李四"); user2.setAge(22); return List.of(user1, user2); }}2.4.2 读取Excel(上传功能)
接收前端上传的Excel文件,通过监听器读取数据并处理:
// Excel上传接口@PostMapping("/uploadExcel")public ResponseEntity<String> uploadExcel(@RequestParam("file") MultipartFile file) { // 校验文件是否为空 if (file.isEmpty()) { return ResponseEntity.badRequest().body("❌ 请选择要上传的Excel文件!"); } try { // 创建监听器实例 BaseExcelListener<User> excelListener = new BaseExcelListener<>(); // 读取Excel文件 FastExcel.read(file.getInputStream(), User.class, excelListener) .sheet() // 第一个工作表 .doRead(); // 获取读取到的数据 List<User> userList = excelListener.getDataList(); System.out.println("📊 读取到的用户数据:" + userList); return ResponseEntity.ok("✅ Excel文件上传并处理成功!共读取" + userList.size() + "条数据"); } catch (IOException e) { e.printStackTrace(); return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) .body("❌ Excel文件处理失败:" + e.getMessage()); }}整个过程内存占用极低,即使处理10万行数据也无压力💪!
三、迁移FastExcel🚀
如果你之前的项目使用EasyExcel,想要迁移到FastExcel,只需两步操作,零代码改动!
3.1 修改依赖
替换pom.xml中的EasyExcel依赖为FastExcel:
<!-- 移除原EasyExcel依赖 --><!--<dependency> <groupId>com.alibaba</groupId> <artifactId>easyexcel</artifactId> <version>xxxx</version></dependency>--><!-- 添加FastExcel依赖 --><dependency> <groupId>cn.idev.excel</groupId> <artifactId>fastexcel</artifactId> <version>1.3.0</version></dependency>3.2 修改包名
将代码中EasyExcel的包名替换为FastExcel:
// 替换前// import com.alibaba.excel.**;// 替换后import cn.idev.excel.**;搞定!🎉 所有原有功能完全正常运行,迁移就是这么简单!
四、总结🌟
FastExcel完美继承了原框架EasyExcel的优点,无论是新项目选型还是老项目迁移,都是首选项:
• 👉 零成本迁移:仅改依赖和包名,无需调整业务代码 • 👉 高性能低内存:延续逐行读取机制,大文件处理无压力 • 👉 持续维护:原作者亲自操刀
#Java #Excel #FastExcel #EasyExcel
📚 往期回顾
📌 收藏本文,随时回顾精彩观点❤️ 分享给需要的朋友,一起成长🌟 关注随时查看不迷路,获取网盘学习资料
本文来自网友投稿或网络内容,如有侵犯您的权益请联系我们删除,联系邮箱:wyl860211@qq.com 。