java读取csv无官方api,可用bufferedreader手动解析(适合简单csv)或apache commons csv(推荐,支持rfc 4180)、opencsv(支持bean映射)等第三方库,需注意编码、资源关闭、异常处理及字段类型转换。

Java 读取 CSV 文件没有内置的官方 API,但可以通过标准库(如 BufferedReader)手动解析,或使用成熟第三方库(如 Apache Commons CSV、OpenCSV、Jackson CSV)更安全、简洁地处理。关键在于正确处理逗号、换行、引号包裹字段等 CSV 特殊格式。
用 BufferedReader 手动读取(适合简单无复杂字段的 CSV)
适用于字段不含逗号、换行、双引号的纯文本 CSV(例如导出的简单表格)。核心是按行读取,再用 String.split(",") 切分,但要注意:默认 split 不处理引号包围的含逗号内容,需自行规避。
- 使用
Files.lines()或BufferedReader逐行读取 - 对每行调用
line.split(",", -1)(-1保留末尾空字段) - 用
String.trim()清除每个字段首尾空格(CSV 常见空格问题) - 跳过空行和注释行(如以
#开头)
用 Apache Commons CSV(推荐,功能强且轻量)
这是最常用、文档完善、支持 RFC 4180 标准的开源库。能自动处理带引号的字段、嵌入换行符、转义双引号等复杂情况。
- Maven 引入:
<dependency><groupid>org.apache.commons</groupid><artifactid>commons-csv</artifactid><version>1.10.0</version></dependency> - 用
CSVFormat.DEFAULT.withFirstRecordAsHeader()自动识别表头 - 通过
CSVParser获取Iterable<csvrecord></csvrecord>遍历数据 - 用
record.get("列名")或record.get(0)获取字段,安全且类型为 String
用 OpenCSV(老牌易上手,适合快速开发)
语法更简洁,支持直接映射到 Java Bean(@CsvBindByName),适合结构固定、需转对象的场景。
- Maven 引入:
<dependency><groupid>com.opencsv</groupid><artifactid>opencsv</artifactid><version>5.7.1</version></dependency> - 用
CsvToBeanBuilder<yourbean></yourbean>一行代码将 CSV 转为 List - 若无 Bean,可用
CSVReader读取为String[]数组,自动处理引号与换行 - 注意:默认不跳过空行,需手动过滤
row.length == 0
注意事项与避坑点
无论用哪种方式,都要注意编码、资源关闭和异常处理。
- 明确指定文件编码(如
StandardCharsets.UTF_8),避免中文乱码 - 务必使用 try-with-resources 自动关闭
Reader或CSVParser - CSV 中数字、布尔值仍是字符串,需手动转换(如
Integer.parseInt()),并捕获NumberFormatException - 大文件慎用一次性加载全部内容到内存;可流式逐行处理
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











