Apache Commons CSV Maven 依赖

Maven 依赖地址

要在项目中使用 Apache Commons CSV,需要在 pom.xml 文件中添加以下依赖:

<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-csv</artifactId>
    <version>1.10.0</version> <!-- 请使用最新版本 -->
</dependency>

你可以查看 https://mvnrepository.com/artifact/org.apache.commons/commons-csv 获取最新版本。

使用示例

下面是一个完整的示例,展示如何使用 Apache Commons CSV 读取和写入 CSV 文件:

1. 读取 CSV 文件

import org.apache.commons.csv.CSVFormat;
import org.apache.commons.csv.CSVParser;
import org.apache.commons.csv.CSVRecord;

import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;

public class CSVReaderExample {
    public static void main(String[] args) {
        try (Reader reader = new FileReader("data.csv");
             CSVParser csvParser = new CSVParser(reader, CSVFormat.DEFAULT
                     .withFirstRecordAsHeader() // 使用第一行作为表头
                     .withIgnoreHeaderCase()
                     .withTrim())) {
            
            // 遍历所有记录
            for (CSVRecord record : csvParser) {
                // 通过列名访问值
                String name = record.get("Name");
                String email = record.get("Email");
                String phone = record.get("Phone");
                
                System.out.println("Record #" + record.getRecordNumber());
                System.out.println("---------------");
                System.out.println("Name : " + name);
                System.out.println("Email : " + email);
                System.out.println("Phone : " + phone);
                System.out.println("---------------\n");
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

2. 写入 CSV 文件

import org.apache.commons.csv.CSVFormat;
import org.apache.commons.csv.CSVPrinter;

import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;
import java.util.Arrays;

public class CSVWriterExample {
    public static void main(String[] args) {
        try (Writer writer = new FileWriter("output.csv");
             CSVPrinter csvPrinter = new CSVPrinter(writer, CSVFormat.DEFAULT
                     .withHeader("Name", "Email", "Phone"))) {
            
            // 写入记录
            csvPrinter.printRecord("John Doe", "john.doe@example.com", "555-1234");
            csvPrinter.printRecord("Jane Smith", "jane.smith@example.com", "555-5678");
            
            // 也可以使用列表
            csvPrinter.printRecord(Arrays.asList("Bob Johnson", "bob@example.com", "555-9012"));
            
            csvPrinter.flush();
            System.out.println("CSV文件写入完成!");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

主要类说明

  1. CSVFormat - 定义CSV文件的格式,如分隔符、是否包含表头等

    • CSVFormat.DEFAULT - 默认格式(逗号分隔)
    • CSVFormat.EXCEL - Excel兼容格式
    • CSVFormat.TDF - 制表符分隔格式
  2. CSVParser - 解析CSV文件并生成CSVRecord对象

  3. CSVRecord - 表示CSV文件中的一行记录

    • get(String headerName) - 通过列名获取值
    • get(int index) - 通过列索引获取值
    • getRecordNumber() - 获取记录号
  4. CSVPrinter - 将数据写入CSV文件

高级用法

自定义格式

CSVFormat customFormat = CSVFormat.DEFAULT
    .withDelimiter(';')          // 使用分号作为分隔符
    .withQuote('"')             // 使用双引号作为引号字符
    .withRecordSeparator("\r\n") // 使用Windows换行符
    .withSkipHeaderRecord();     // 跳过表头

处理没有表头的CSV文件

try (Reader reader = new FileReader("no_header.csv");
     CSVParser csvParser = new CSVParser(reader, CSVFormat.DEFAULT)) {
    
    for (CSVRecord record : csvParser) {
        // 通过索引访问列
        String col1 = record.get(0);
        String col2 = record.get(1);
        // ...
    }
}

Apache Commons CSV 是一个功能强大且灵活的库,适用于各种CSV处理需求,支持多种CSV格式变体,并提供了方便的API来读写CSV文件。

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐