java解析csv需用bufferedreader逐行读取并按分隔符切分,但须处理引号包裹、转义逗号、换行等;简单场景可用split(),复杂场景推荐opencsv等库,再做类型转换与对象映射。

Java 用字符流解析 CSV 文件的多字段内容,核心是用 BufferedReader 逐行读取文本,再按逗号(或其它分隔符)切分字段——但要注意引号包裹、逗号嵌套、换行符转义等 CSV 特殊格式,不能简单用 String.split(",")。
基础字符流读取 + 手动解析(适合简单 CSV)
若 CSV 规则严格(无引号、无换行、无转义逗号),可用 InputStreamReader + BufferedReader 按行读取,再用 split() 切分:
- 用
Files.newBufferedReader(Paths.get("data.csv"), StandardCharsets.UTF_8)创建带编码的字符流 - 每行调用
line.trim().split(","),注意去除首尾空格,并对每个字段再trim() - 跳过空行和注释行(如以
#开头)
处理带引号和转义的 CSV(推荐用状态机)
真实 CSV 常见 "John, Doe" 或 "Text ""with quotes""" 这类结构。手动实现需跟踪“是否在引号内”状态:
Miller (mlr) 是一个命令行工具,用于查询、整形和重新格式化名称索引数据,如 CSV、TSV、JSON 和 JSON Lines。它将 awk、sed、cut、join 和 sort 的功能整合到一个专为结构化数据处理而构建的单一工具中。
- 遍历字符,设布尔变量
inQuotes = false - 遇
"切换inQuotes;若连续两个"(即""),视为转义,只保留一个 - 仅当
!inQuotes且遇到逗号时才切分字段 - 跳过行首/行尾引号,保留内部空格(如
" abc "→" abc ")
更稳妥:用轻量库(如 OpenCSV 或 Apache Commons CSV)
不建议从零手写复杂 CSV 解析器。引入 opencsv 后,几行代码即可安全处理多字段:
- Maven 添加依赖:
<dependency><groupid>com.opencsv</groupid><artifactid>opencsv</artifactid><version>5.7.1</version></dependency> - 代码示例:
try (CSVReader reader = new CSVReader(new FileReader("data.csv")))List<string> records = reader.readAll();</string>for (String[] fields : records) {// fields[0] 是第1列,fields[1] 是第2列……自动处理引号与转义}
字段类型转换与业务映射
解析出字符串数组后,常需转为具体类型(如数字、日期)并映射到对象:
- 用
Integer.parseInt()、LocalDateTime.parse()等做安全转换(加 try-catch) - 可配合
HeaderColumnNameMappingStrategy(OpenCSV)将首行作为列名,直接绑定到 Java Bean 字段 - 若字段数不固定,用
List<map string>></map>存储,键为列名,值为字段内容
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










