在Java中处理CSV文件是一项常见任务,无论是数据分析、数据导入导出还是系统间数据交换,CSV格式都因其简洁性和通用性而被广泛使用,本文将详细介绍如何使用Java打开和读取CSV文件,涵盖多种实现方式,包括原生Java操作、第三方库使用以及最佳实践建议。

使用原生Java API读取CSV文件
Java标准库中并没有直接提供CSV文件处理的专用类,但可以通过BufferedReader和String.split()方法实现基本功能,以下是简单示例:
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
public class CsvReader {
public static void main(String[] args) {
String csvFile = "data.csv";
String line = "";
String delimiter = ",";
try (BufferedReader br = new BufferedReader(new FileReader(csvFile))) {
while ((line = br.readLine()) != null) {
String[] data = line.split(delimiter);
// 处理数据,例如打印第一列
System.out.println(data[0]);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
注意事项:
- 此方法适用于简单的CSV文件,若字段中包含逗号(如
"Smith, John"),会导致解析错误。 - 需要手动处理转义字符(如双引号)和换行符。
- 建议使用
try-with-resources确保资源自动关闭。
使用OpenCSV库处理复杂CSV文件
对于包含复杂结构的CSV文件(如带引号的字段、多行记录等),推荐使用成熟的第三方库如OpenCSV,首先需添加依赖(Maven):
<dependency>
<groupId>com.opencsv</groupId>
<artifactId>opencsv</artifactId>
<version>5.7.1</version>
</dependency>
示例代码:

import com.opencsv.CSVReader;
import java.io.FileReader;
import java.io.IOException;
public class OpenCsvExample {
public static void main(String[] args) {
String csvFile = "data.csv";
try (CSVReader reader = new CSVReader(new FileReader(csvFile))) {
// 读取所有行
List<String[]> allData = reader.readAll();
for (String[] row : allData) {
System.out.println(Arrays.toString(row));
}
// 逐行读取
String[] nextLine;
while ((nextLine = reader.readNext()) != null) {
System.out.println(nextLine[0]);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
优势:
- 自动处理引号、转义字符和换行符。
- 支持自定义分隔符、编码格式和注释行。
- 提供更高级的功能,如映射到Java对象(
CSVReaderHeaderAware)。
使用Apache Commons CSV库
Apache Commons CSV是另一个流行的选择,其API设计更符合Java标准库风格,添加依赖:
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-csv</artifactId>
<version>1.9.0</version>
</dependency>
示例代码:
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.util.List;
public class ApacheCsvExample {
public static void main(String[] args) {
String csvFile = "data.csv";
try (CSVParser parser = new CSVParser(new FileReader(csvFile), CSVFormat.DEFAULT)) {
List<CSVRecord> records = parser.getRecords();
for (CSVRecord record : records) {
System.out.println(record.get(0)); // 获取第一列数据
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
特点:

- 支持RFC 4180标准(CSV规范)。
- 可灵活配置格式,如包含标题行、自定义分隔符等。
- 提供流式处理,适合大文件读取。
最佳实践与注意事项
- 文件编码:始终明确指定文件编码(如UTF-8),避免乱码问题。
new FileReader(csvFile, StandardCharsets.UTF_8)
- 异常处理:妥善处理
IOException,建议记录日志或提供用户友好的错误提示。 - 性能优化:大文件优先使用流式读取(如
CSVReader的readNext()),避免readAll()导致内存溢出。 - 字段类型转换:若需将CSV数据转换为数值类型,需添加异常处理:
try { int age = Integer.parseInt(record.get("age")); } catch (NumberFormatException e) { System.err.println("无效的数字格式"); }
Java中打开CSV文件的方法多样,选择时需根据场景需求权衡:
- 简单场景:原生Java API足够,但需自行处理边界情况。
- 复杂场景:优先使用OpenCSV或Apache Commons CSV,它们提供了更健壮和易用的功能。
通过合理选择工具和遵循最佳实践,可以高效、安全地完成CSV文件处理任务。


















