讲师中心 微信公众号
AI工具推荐 视频效率加速

如何在Java中处理CSV文件_OpenCSV库的读取与写入操作

老强小哥_1146

老强小哥_1146

发布时间:2026-03-10 00:15:15

|

550人浏览过

|

来源于php中文网

原创

OpenCSV读CSV需显式指定编码(如GBK)和分隔符(如';'或' '),避免乱码和截断;写入前统一转字符串并设换行符;CsvToBean要求列头与字段名字面完全匹配;大文件须用readNext()流式处理。

如何在java中处理csv文件_opencsv库的读取与写入操作

读取CSV时字段被截断或乱码,怎么设编码和分隔符

OpenCSV默认用UTF-8读文件,但Windows上Excel导出的CSV常是GBK或GB2312;如果没显式指定,CSVReader会按平台默认编码解析,中文直接变问号或乱码。分隔符也一样——逗号不是绝对的,有些CSV用分号或制表符,OpenCSV不自动识别,必须手动传参。

实操建议:

  • 用InputStreamReader包装FileInputStream,显式指定编码,再传给CSVReader
  • 构造CSVReader时务必传CSVParser实例,用new CSVParserBuilder().withSeparator(';').build()定制分隔符
  • 别依赖new CSVReader(new FileReader(...)),FileReader无法指定编码,是坑的源头

示例片段:

Reader reader = new InputStreamReader(new FileInputStream("data.csv"), "GBK");
CSVReader csvReader = new CSVReader(reader, new CSVParserBuilder().withSeparator('	').build());

写入CSV时引号、换行、逗号崩溃,怎么安全转义

OpenCSV默认对含逗号、换行、双引号的字段自动加引号并转义,但前提是字段得是字符串类型。如果传了null或数字没转成字符串,CSVWriter可能抛NullPointerException或输出格式错乱;更隐蔽的是,字段里有 ,OpenCSV默认只处理 ,Windows换行可能被当两行。

立即学习“Java免费学习笔记(深入)”;

实操建议:

  • 写入前统一调用String.valueOf(),避免null或原始类型直传
  • 用CSVWriter.DEFAULT_QUOTE_CHARACTER和CSVWriter.DEFAULT_ESCAPE_CHARACTER确认当前转义规则,不要假设
  • 如需兼容Excel,写入时用new CSVWriter(writer, ',', '"', '\', " ")显式设行结束符

错误现象举例:java.lang.NullPointerException出现在writeNext()调用处,大概率是数组里混了null。

JavaStoryDevelop
JavaStoryDevelop

你接手一个需求时,是不是经常这样:"改一个小字段 → 结果把不相关的代码也改了"、"需求说得很模糊 → 做着做着发现跑偏了"、"数据库加个字段 → 上线才发现漏了数据兼容"、"做了个新功能 → 一个月后自己都忘了当时怎么设计的"、"写到一半被中断 → 再回来不知道从哪继续";这个 Skill 就是专门解决这些问题的。 它会自动探测你的项目环境(JDK、Spring Boot、ORM、数据库、前端框架),记在

下载

用CsvToBean映射对象时字段对不上,为什么@CsvBindByName失效

CsvToBean靠字段名匹配列头,但默认严格区分大小写,且要求CSV首行必须是标准英文列名。如果CSV列头是“用户姓名”或“userName”,而Java字段叫userName,@CsvBindByName(column = "用户姓名")才生效;不加column参数就只认完全一致的小写英文名。

实操建议:

  • 启用StrictQuoteMode前先关掉——new CsvToBeanBuilder(reader).withIgnoreLeadingWhiteSpace(true).withType(MyClass.class).build()
  • 确保CSV第一行是纯ASCII列名,否则@CsvBindByName基本失效
  • 字段类型要和CSV内容能parse通,比如CSV里是"2024-01-01",Java字段却声明为int,会静默跳过该字段

常见错误:CSV列头为“Order ID”,Java字段@CsvBindByName(column = "order id")——空格和大小写都必须完全一致。

大文件读取OOM或慢得离谱,怎么流式处理不加载全内存

OpenCSV本身是流式API,但很多人误用CSVReader.readAll(),它会把整个CSV读进List,百万行轻松吃光1G堆内存。真正流式是用readNext()循环,每次只拿一行,但要注意:底层Reader不能提前关闭,否则后续readNext()返回null。

实操建议:

  • 永远避免readAll(),改用while ((line = reader.readNext()) != null)结构
  • 配合try-with-resources时,只包裹Reader,别把CSVReader也放进去——它的close()会关底层流
  • 如果需随机访问或多次遍历,别硬扛,先存到数据库或临时文件,CSV不是数据库替代品

性能影响点:每行readNext()开销极小,但频繁GC字符串数组(尤其字段多)仍可观,字段数超20列时建议复用String[]数组实例。

最常被忽略的是CSV列头和Java字段名的映射契约——它不靠注解自动推断语义,只认字面精确匹配。一个空格、一个大小写、一个中文标点,都能让CsvToBean静默失败。

热门AI工具

更多
咔片AIPPT

一款在线AI演示文稿制作工具,可根据主题和内容需求辅助生成PPT结构与页面,提高演示材料制作效率。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

讯飞绘文

讯飞绘文是一款由科大讯飞推出的一站式 AIGC 内容运营平台。

Lovart
Lovart Hot

一款面向视觉设计创作的AI设计平台,可通过智能体和画布工作流辅助制作海报、Logo、网页、PPT及其他视觉内容。

Loomy
Loomy Hot

一款AI工具,主要用于科大讯飞发布的桌面级 AI 助理,比 OpenClaw 更易用、更安全!,适合需要提升相关任务效率的用户。

PixPix
PixPix Hot

PixPix是一款面向电商视觉生产的AI商品图生成工具。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

立刻MV
立刻MV Hot

立刻MV是一款AI文本写作工具,AI 音乐视频(MV)创作工具。

相关专题

更多
java
java

Java是一个通用术语,用于表示Java软件及其组件,包括“Java运行时环境 (JRE)”、“Java虚拟机 (JVM)”以及“插件”。php中文网还为大家带了Java相关下载资源、相关课程以及相关文章等内容,供大家免费下载使用。

11257

2023.06.15

java正则表达式语法
java正则表达式语法

java正则表达式语法是一种模式匹配工具,它非常有用,可以在处理文本和字符串时快速地查找、替换、验证和提取特定的模式和数据。本专题提供java正则表达式语法的相关文章、下载和专题,供大家免费下载体验。

8382

2023.07.05

java自学难吗
java自学难吗

Java自学并不难。Java语言相对于其他一些编程语言而言,有着较为简洁和易读的语法,本专题为大家提供java自学难吗相关的文章,大家可以免费体验。

7232

2023.07.31

java配置jdk环境变量
java配置jdk环境变量

Java是一种广泛使用的高级编程语言,用于开发各种类型的应用程序。为了能够在计算机上正确运行和编译Java代码,需要正确配置Java Development Kit(JDK)环境变量。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

1204

2023.08.01

java保留两位小数
java保留两位小数

Java是一种广泛应用于编程领域的高级编程语言。在Java中,保留两位小数是指在进行数值计算或输出时,限制小数部分只有两位有效数字,并将多余的位数进行四舍五入或截取。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

968

2023.08.02

java基本数据类型
java基本数据类型

java基本数据类型有:1、byte;2、short;3、int;4、long;5、float;6、double;7、char;8、boolean。本专题为大家提供java基本数据类型的相关的文章、下载、课程内容,供大家免费下载体验。

1456

2023.08.02

java有什么用
java有什么用

java可以开发应用程序、移动应用、Web应用、企业级应用、嵌入式系统等方面。本专题为大家提供java有什么用的相关的文章、下载、课程内容,供大家免费下载体验。

2969

2023.08.02

java在线网站
java在线网站

Java在线网站是指提供Java编程学习、实践和交流平台的网络服务。近年来,随着Java语言在软件开发领域的广泛应用,越来越多的人对Java编程感兴趣,并希望能够通过在线网站来学习和提高自己的Java编程技能。php中文网给大家带来了相关的视频、教程以及文章,欢迎大家前来学习阅读和下载。

20231

2023.08.03

Gradle插件开发入门教程
Gradle插件开发入门教程

本专题介绍Gradle插件开发的基本流程,涵盖插件类编写、自定义任务注册、扩展参数设计和插件应用方法,帮助你理解插件如何组织构建逻辑,减少多个项目之间的重复配置。

60

2026.10.22

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
dev.java 官方:Learn Java
dev.java 官方:Learn Java

共0课时 | 0人学习

Java JDBC数据库连接官方教程
Java JDBC数据库连接官方教程

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn