-------------------------------------------------------------------------------------------
Apache POI 是一款常用的 Excel 处理工具,但在一些场景下,存在内存占用高、处理速度慢等问题。以下是一些比 POI 更具优势的轻量级 Excel 处理工具:
- EasyExcel:是阿里巴巴开源的基于 Java 的 Excel 处理工具。它重写了 POI 对 Excel 的解析方式,采用事件驱动模式和增量解析的方式,逐行解析 Excel 数据,不会将整个文件加载到内存中,内存占用可以控制在 KB 级别,完美解决了大数据量 Excel 处理时的内存溢出问题。此外,其 API 简洁易用,通过注解即可完成 Excel 与实体类的映射,还支持多种 Excel 格式以及复杂表头、合并单元格等复杂场景。
- EEC(Excel Export Core):一款轻量且高效的 Excel 读写工具,专为解决大数据量、高并发场景下的 Excel 处理问题而设计。它针对 xlsx 文件采用 SAX 解析模式和事件驱动模型,像 “流” 一样逐行或逐块读取 Excel 数据,处理完立即释放内存,在处理 100 万行数据时,内存可稳定在 50MB 以内。EEC 的 API 简洁,遵循 “约定优于配置” 原则,核心操作只需几行代码即可完成,同时支持 xls、xlsx、csv 等多种格式,且读写不同格式的 API 完全一致。
- FastExcel:一个专注于 Excel 读写的轻量级开源库,其 API 设计优雅,支持流式处理,特别适合处理大文件。在实际测试中,处理 100 万行数据时,FastExcel 仅需 2 分钟,峰值内存为 500MB,而 Apache POI 则需要 15 分钟,峰值内存 4GB。相比 POI 性能更优,比 EasyExcel 更轻量。
- GcExcel:一款服务端 Java Excel 组件,产品架构轻量灵活,无需第三方组件依赖。与 Apache POI 相比,GcExcel 速度更快、性能更高、内存消耗更少,处理速度是 POI 的 7 倍,内存消耗不到 POI 的七分之一。它支持 452 种 Excel 计算公式,内置了更多条件格式规则,支持多种图表类型、迷你图、数据切片器等,还能轻松地导入和导出 CSV,支持导出到 PDF。
-------------------------------------------------------------------------------------------
在 Spring Boot 项目中,文件处理(上传、下载、解析、生成等)是常见需求,以下是一些主流的文件处理框架和工具,可根据场景选择使用:
Spring Boot 本身提供了基础的文件上传下载支持,无需额外框架,通过 MultipartFile
即可实现:
@PostMapping("/upload")
public String uploadFile(@RequestParam("file") MultipartFile file) throws IOException {
@GetMapping("/download")
public ResponseEntity<Resource> downloadFile() {
配置优化(application.yml):
spring:servlet:multipart:max-file-size: 10MB
- 优势:轻量、内存占用低(流式处理)、API 简洁,支持大数据量 Excel 读写。
- 场景:导入导出、复杂表头、大数据量(百万级)处理。
依赖:
<dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>3.3.0</version>
</dependency>
示例(导出 Excel):
@GetMapping("/export")
public void exportExcel(HttpServletResponse response) throws IOException {
- 优势:功能全面,支持所有 Excel 格式(xls/xlsx),但内存占用较高。
- 场景:复杂格式处理(图表、公式、宏等)。
依赖:
<dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>5.2.4</version>
</dependency>
<dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>5.2.4</version>
</dependency>
- 优势:功能强大,支持 PDF 生成、编辑、签名等。
- 场景:动态生成 PDF 报表、合同等。
依赖:
<dependency><groupId>com.itextpdf</groupId><artifactId>itextpdf</artifactId><version>5.5.13.3</version>
</dependency>
示例(生成简单 PDF):
public void generatePdf() throws DocumentException, IOException {Document document = new Document();PdfWriter.getInstance(document, new FileOutputStream("test.pdf"));document.open();document.add(new Paragraph("Hello, PDF!"));document.close();
}
- 优势:Apache 开源项目,专注于 PDF 解析和提取内容。
- 场景:读取 PDF 文本、提取图片等。
依赖:
<dependency><groupId>org.apache.pdfbox</groupId><artifactId>pdfbox</artifactId><version>2.0.29</version>
</dependency>
- 优势:集成阿里云对象存储,适合分布式系统的文件存储。
- 场景:图片、视频等大文件的云端存储。
依赖:
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alicloud-oss</artifactId>
</dependency>
- 优势:开源的对象存储服务,兼容 S3 协议,可自建存储服务。
- 场景:私有化部署的文件存储需求。
依赖:
<dependency><groupId>io.minio</groupId><artifactId>minio</artifactId><version>8.5.2</version>
</dependency>
- commons-io:Apache 工具类,简化文件 IO 操作(复制、删除、大小计算等)。
<dependency><groupId>commons-io</groupId><artifactId>commons-io</artifactId><version>2.11.0</version>
</dependency>
- Thumbnails(thumbnailator):图片处理工具,支持压缩、裁剪、旋转等。
<dependency><groupId>net.coobird</groupId><artifactId>thumbnailator</artifactId><version>0.4.19</version>
</dependency>
- 简单上传下载:直接使用 Spring Boot 内置的
MultipartFile
。
- Excel 处理:优先选
EasyExcel
(轻量高效),复杂场景用 POI
。
- PDF 处理:生成用
iText
,解析用 PDFBox
。
- 分布式存储:阿里云 OSS 或 MinIO。
-------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------