Java CSV 文件读写实战:使用 Apache Commons CSV
·
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();
}
}
}
主要类说明
-
CSVFormat - 定义CSV文件的格式,如分隔符、是否包含表头等
CSVFormat.DEFAULT- 默认格式(逗号分隔)CSVFormat.EXCEL- Excel兼容格式CSVFormat.TDF- 制表符分隔格式
-
CSVParser - 解析CSV文件并生成CSVRecord对象
-
CSVRecord - 表示CSV文件中的一行记录
get(String headerName)- 通过列名获取值get(int index)- 通过列索引获取值getRecordNumber()- 获取记录号
-
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文件。
更多推荐


所有评论(0)