
FastCSV 读取 CSV 的 3 种记录类型CsvRecord、NamedCsvRecord 与 StringArray一篇搞懂怎么选【免费下载链接】FastCSVFast, lightweight, and RFC 4180 compliant CSV library for Java. Zero dependencies, ~90 KiB. Trusted by Apache NiFi, JUnit, and Neo4j.项目地址: https://gitcode.com/gh_mirrors/fa/FastCSV处理 CSV 数据是 Java 开发中最常见的需求之一而FastCSV 读取 CSV时提供的 3 种记录类型——CsvRecord、NamedCsvRecord与StringArray——让新手经常犯难到底该用哪一个本文用最简单的方式帮你一次搞懂 3 种记录类型的区别、适用场景与选择技巧读完就能直接上手。FastCSV 是一个零依赖、约 90 KiB、完全兼容 RFC 4180 的轻量级 Java CSV 库被 Apache NiFi、JUnit、Neo4j 等知名项目广泛使用。它的读取 API 设计得非常优雅同一个CsvReader构建器通过不同的入口方法就能产出不同形态的记录对象。下面逐一介绍。1. CsvRecord最通用的按索引读取方式CsvRecord是 FastCSV 最基础的记录类型适合表头不重要、或你知道每一列顺序的场景。它的特点是不可变、线程安全字段值永远不会是null空字段用空字符串表示。一行代码读取 CsvRecordtry (CsvReaderCsvRecord csv CsvReader.builder().ofCsvRecord(data)) { for (CsvRecord record : csv) { System.out.println(record.getField(0)); // 按索引取字段 } }CsvRecord 的常用方法一览方法作用getField(int index)按索引取字段值从 0 开始getFields()获取全部字段不可变 ListgetFieldCount()获取字段数量getStartingLineNumber()获取记录起始行号处理多行字段时很有用isComment()判断是否为注释行CsvRecord的完整 API 定义可参考源码CsvRecord.java。2. NamedCsvRecord按表头名称读取代码可读性最佳如果你的 CSV 文件带有表头第一行是列名那么NamedCsvRecord是首选。它继承自CsvRecord额外增加了按名称取值的强大能力代码写出来几乎和读自然语言一样清晰。按名称取值有多方便try (CsvReaderNamedCsvRecord csv CsvReader.builder().ofNamedCsvRecord(data)) { csv.forEach(rec - System.out.println(rec.getField(firstName))); }当表头顺序变化时你的业务代码完全不用改这正是 NamedCsvRecord 的核心价值。NamedCsvRecord 的进阶方法getField(String name)按名称取值不存在时抛出异常findField(String name)返回OptionalString安全取值getFieldsAsMap()将整行转换为MapString, StringgetHeader()获取表头名称列表⚠️ 小提示表头名称是区分大小写的且允许重复。如果出现重复表头getFieldsAsMap()只保留第一个值需要全部值时用getFieldsAsMapList()。实现细节见 NamedCsvRecord.java。3. StringArray极致性能的原始数组读取前两种类型都是不可变对象封装和访问会带来少量内存开销。当你在高性能、大量对象分配成为瓶颈的场景如大数据批处理、基准测试下FastCSV 提供了第三种选择——StringArrayHandler直接以String[]数组返回每一行零封装开销。StringArray 的读取写法final var handler StringArrayHandler.builder().build(); try (CsvReaderString[] csv CsvReader.builder().build(handler, data)) { for (String[] fields : csv) { System.out.println(fields[0] , fields[1]); } }官方文档明确提醒只在确定需要时才使用它。日常业务开发优先用前两种避免过早优化。完整的示例代码见 ExampleCsvReaderWithStringArrayAccess.java。3 种记录类型对比速查表对比维度CsvRecordNamedCsvRecordStringArray入口方法ofCsvRecord()ofNamedCsvRecord()build(handler, ...)取值方式按索引按名称按索引不可变/线程安全✅✅❌直接暴露数组对象分配开销中等中等最低适合场景通用读取有表头的业务数据极致性能场景怎么选记住这 3 条黄金法则有表头、要可读性→ 用NamedCsvRecord表头变动也不怕无表头、按列处理→ 用CsvRecord简单直接够用性能敏感、追求极致→ 用StringArray但请先确认真的需要。进阶从记录映射到业务对象实际项目中我们通常会把读取到的记录映射成业务对象。配合 Java 的record特性整个过程非常优雅Person mapPerson(final NamedCsvRecord rec) { return new Person( Long.parseLong(rec.getField(ID)), rec.getField(firstName), rec.getField(lastName) ); }完整示例见 ExampleCsvReaderMapping.java更多读取技巧BOM 处理、注释行、字段修饰等可以参考文档目录 docs/src/content/docs/guides/。总结FastCSV 读取 CSV 的 3 种记录类型各有定位CsvRecord通用稳妥、NamedCsvRecord清晰易读、StringArray极致高效。绝大多数场景下NamedCsvRecord是你最好的默认选择。现在就打开项目用 FastCSV 感受一下零依赖、极速解析的 CSV 读取体验吧【免费下载链接】FastCSVFast, lightweight, and RFC 4180 compliant CSV library for Java. Zero dependencies, ~90 KiB. Trusted by Apache NiFi, JUnit, and Neo4j.项目地址: https://gitcode.com/gh_mirrors/fa/FastCSV创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考