Java编程中使用EasyExcel处理CSV文件的方法

2025-04发布8次浏览

在Java编程中,使用EasyExcel处理CSV文件是一种高效且便捷的方式。EasyExcel是阿里巴巴开源的一个轻量级Excel处理库,虽然它主要针对Excel文件(如.xlsx.xls),但也可以通过一定的配置来处理CSV文件。本文将详细介绍如何利用EasyExcel库读取和写入CSV文件,并探讨其优势与适用场景。


一、EasyExcel简介

EasyExcel是一个基于Java的Excel处理工具,旨在简化Excel文件的读写操作。相比传统的Apache POI等库,EasyExcel具有以下特点:

  • 高性能:支持大数据量的读写操作。
  • 低内存占用:通过流式读取方式减少内存消耗。
  • 简单易用:提供注解驱动的API设计,降低学习成本。

尽管EasyExcel主要用于处理Excel文件,但由于CSV文件本质上是纯文本格式,因此可以通过自定义解析器或调整分隔符来实现对CSV文件的支持。


二、环境准备

在开始之前,请确保你的开发环境中已正确配置以下内容:

  1. 引入依赖:在pom.xml中添加EasyExcel的Maven依赖。

    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>easyexcel</artifactId>
        <version>3.0.5</version>
    </dependency>
    
  2. 创建数据模型类:定义一个与CSV文件结构对应的Java实体类。

    public class CsvData {
        private String name;
        private Integer age;
        private String email;
    
        // Getters and Setters
        public String getName() { return name; }
        public void setName(String name) { this.name = name; }
    
        public Integer getAge() { return age; }
        public void setAge(Integer age) { this.age = age; }
    
        public String getEmail() { return email; }
        public void setEmail(String email) { this.email = email; }
    
        @Override
        public String toString() {
            return "CsvData{name='" + name + "', age=" + age + ", email='" + email + "'}";
        }
    }
    

三、读取CSV文件

EasyExcel默认不直接支持CSV文件,但可以通过设置分隔符为逗号(,)来模拟CSV文件的解析。以下是具体步骤:

1. 配置读取器

import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;

public class CsvReaderExample {
    public static void main(String[] args) {
        String fileName = "data.csv";
        EasyExcel.read(fileName, CsvData.class, new CsvListener()).sheet().doRead();
    }

    static class CsvListener extends AnalysisEventListener<CsvData> {
        @Override
        public void invoke(CsvData data, AnalysisContext context) {
            System.out.println("读取到的数据: " + data);
        }

        @Override
        public void doAfterAllAnalysed(AnalysisContext context) {
            System.out.println("所有数据读取完毕!");
        }
    }
}

2. 处理CSV文件

假设data.csv的内容如下:

name,age,email
Alice,25,alice@example.com
Bob,30,bob@example.com
Charlie,22,charlie@example.com

运行上述代码后,程序会逐行读取CSV文件中的数据,并打印到控制台。


四、写入CSV文件

EasyExcel同样可以用来生成CSV文件。以下是具体的实现步骤:

1. 创建数据列表

import com.alibaba.excel.EasyExcel;

import java.util.ArrayList;
import java.util.List;

public class CsvWriterExample {
    public static void main(String[] args) {
        String fileName = "output.csv";

        List<CsvData> dataList = new ArrayList<>();
        dataList.add(new CsvData("David", 28, "david@example.com"));
        dataList.add(new CsvData("Eva", 24, "eva@example.com"));

        EasyExcel.write(fileName, CsvData.class).sheet("Sheet1").doWrite(dataList);
    }
}

2. 输出结果

运行上述代码后,会在指定路径生成名为output.csv的文件,内容如下:

name,age,email
David,28,david@example.com
Eva,24,eva@example.com

五、注意事项

  1. 分隔符配置:如果CSV文件使用非标准分隔符(如|;),可以通过自定义解析器来支持。
  2. 性能优化:对于大文件,建议使用分页读取或流式写入以降低内存开销。
  3. 异常处理:在实际项目中,应增加对文件路径、编码格式及数据格式的校验逻辑。

六、流程图

以下是读取CSV文件的整体流程图:

flowchart TD
    A[开始] --> B[加载CSV文件]
    B --> C{文件是否合法?}
    C --否--> D[抛出异常]
    C --是--> E[初始化解析器]
    E --> F[逐行解析数据]
    F --> G[调用监听器处理数据]
    G --> H{是否完成解析?}
    H --否--> F
    H --是--> I[结束]