写CSV不用手拼转义,这个Java工具类5个方法按RFC4180来

简介: 这是一个专为Java(JDK 17+)设计的轻量CSV工具类,严格遵循RFC 4180标准,支持自动转义字段中的逗号、引号与换行,提供5个核心方法:目录/Path/编码可选的文件写入、单行格式化及字段级转义,兼顾安全性(防路径穿越)、健壮性(空值/边界校验)与跨平台一致性。

📋 目录

一、工具类功能

把按行组织好的数据拼成符合 RFC 4180 的 CSV 并写入指定目录,父目录自动创建、同名文件覆盖、字符集可选,字段里的逗号、双引号与换行都会被正确转义。

二、所需环境

JDK 17或以上

三、方法与调用示例(按需调用)

🔢 方法序号:1

🎯 方法用途:

  • 按 UTF-8 把已经拼好的 CSV 记录写到指定目录,返回文件路径
  • 导出对账文件、报表给下游系统取走时用这一版

🧩 方法定义:public static Path writeCsv(String dirPath, String fileName, Collection<String> lines) throws IOException

🗣️ 入参解释:public static Path writeCsv(目录字符串, 文件名, 行集合)

📤 返回值解释:Path,写出后的文件路径

💡 边界口径:

  • 每个元素就是一条记录,方法只负责在记录之间插换行,不猜内容
  • 行分隔固定 \n,最后一行不带换行,同样数据在 Windows 与 Linux 上字节一致
  • fileName 只允许纯文件名,含 /、\、: 或 .. 一律拒绝,防目录穿越
  • 目录不存在会自动创建;校验不过时不会落地文件
  • 同名文件直接覆盖,不是追加;真实读写失败按 IOException 原样抛

🧪 方法示例:

  • writeCsv(outDir, "orders-utf8.csv", lines) 写完再判存在,拿到 true
  • 文件字节数拿到 126 字节,记录之间是 3 个 LF 且最后一行不带换行
  • 全文拿到 订单号,客户,金额,备注[LF]ORD20261005000123,张三,128,"备注,带逗号"[LF]ORD20261005000456,李四,66,"多行[LF]第二行"
  • 文件名传 ../evil.csv 抛 fileName 只能是文件名,不能包含路径分隔符或 ..: ../evil.csv
  • 行集合传空集合抛 lines 不能为空,其中一行是 null 抛 第2行内容为null,空行请传空字符串
  • 前面几次失败的调用之后,目录里现存 3 个 csv,校验不过没落地

🔢 方法序号:2

🎯 方法用途:

  • 目录用 Path 传的同一写入口,仍按 UTF-8
  • 用 Paths.get、Path.resolve 组织输出目录的工程里少一次字符串转换

🧩 方法定义:public static Path writeCsv(Path dir, String fileName, Collection<String> lines) throws IOException

🗣️ 入参解释:public static Path writeCsv(目录Path, 文件名, 行集合)

📤 返回值解释:Path,写出后的文件路径

💡 边界口径:

  • 多级父目录一次建齐,不需要先 Files.createDirectories
  • 与字符串目录版同一套校验与写出规则
  • dir 传 null 抛 NullPointerException,消息点出参数名

🧪 方法示例:

  • writeCsv(deepDir, "orders-path.csv", lines) 之后判存在,拿到 true
  • writeCsv(null, "a.csv", lines) 抛 dir 不能为null

🔢 方法序号:3

🎯 方法用途:

  • 指定字符集写出 CSV,给只能读 GBK 的老系统或对端用
  • 要控制 BOM、编码宽度这类差异时走这一版

🧩 方法定义:public static Path writeCsv(Path dir, String fileName, Collection<String> lines, Charset charset) throws IOException

🗣️ 入参解释:public static Path writeCsv(目录Path, 文件名, 行集合, 字符集)

📤 返回值解释:Path,写出后的文件路径

💡 边界口径:

  • charset 传 null 按 UTF-8 走,与三参版产出完全一致的字节
  • 中文内容换字符集字节数会变,GBK 比 UTF-8 少
  • Excel 双击打开无 BOM 的 UTF-8 文件可能中文乱码,要直开就传带 BOM 的字符集或改用 Excel 导出
  • 校验与写出规则同两参版

🧪 方法示例:

  • 同一份内容 GBK 写出拿到 103 字节,UTF-8 是 126 字节
  • 字符集传 null 与 UTF-8 版本比对,拿到 字节一致 true
  • GBK 文件按 GBK 读回首行拿到 订单号,客户,金额,备注
  • 同名文件再写一次是覆盖,字节从 126 变成 21

🔢 方法序号:4

🎯 方法用途:

  • 把一行字段按 RFC 4180 拼成一条 CSV 记录,不含换行
  • 字段里有逗号、引号、换行、首尾空白时必须先经它,别自己拼字符串

🧩 方法定义:public static String formatRow(Collection<?> fields)

🗣️ 入参解释:public static String formatRow(一行字段)

📤 返回值解释:String,一条完整的 CSV 记录

💡 边界口径:

  • 字段按迭代顺序输出,null 字段写成空串,数字与布尔取 toString
  • 需要转义的字段自动加引号,内部双引号翻倍
  • 入参集合本身不被改动
  • 空集合与 null 入参都返回空串,不抛异常

🧪 方法示例:

  • formatRow(fields) 拿到 ORD20261005000123,张三,128,"备注,带逗号",,末尾的 null 字段是空串
  • 集合入参 formatRow(tagFields) 拿到 vip,"加急,特急"
  • formatRow(List.of("备注", multiLine)) 拿到 正确输出 [备注,"多行[LF]第二行"],裸拼的那一份会被读成两条记录
  • 空集合与 null 入参分别拿到 []、[],原集合仍是 [ORD20261005000123, 张三, 128, 备注,带逗号, null]

🔢 方法序号:5

🎯 方法用途:

  • 单个字段做 CSV 转义,需要时才加引号
  • 自己在拼整行、或者要把外部字段安全塞进 CSV 时用

🧩 方法定义:public static String escape(Object value)

🗣️ 入参解释:public static String escape(单个字段)

📤 返回值解释:String,转义后的字段文本

💡 边界口径:

  • 含逗号、双引号、换行的字段加引号,内部双引号翻倍
  • 首尾带空白的字段也加引号,否则会被解析器裁掉;中间空白不用加
  • null 写成空串,数字与布尔取 toString
  • 普通字段原样返回,不加多余引号

🧪 方法示例:

  • escape("订单号") 拿到 [订单号],原样
  • escape("a,b") 拿到 ["a,b"]
  • 字段里带引号时拿到 ["说 ""Hi"""],内部引号翻倍
  • 带换行的字段拿到 ["第一行[LF]第二行"]
  • escape(" 备注 ") 拿到 [" 备注 "],首尾空白被引号保住
  • escape("张 三") 拿到 [张 三],中间空白不用加引号
  • escape(null) 拿到 [],即空串
  • 数字与布尔分别拿到 42、3.14、true

四、工具类源码(可直接复制)

📦 源码文件

相关文章
|
10天前
|
Linux 开发工具 iOS开发
Codex保姆级教程(下载+安装+登录+使用,含所有版本,2026最新)
Codex是OpenAI推出的开源AI编程智能体,本地运行,可理解整个代码库,支持自然语言指令改代码、执行命令、跑测试、修Bug,兼容Win/macOS/Linux。(239字)
3814 16
|
10天前
|
JavaScript API iOS开发
DeepSeek Harness下载、安装、配置一篇搞定(2026整理,送常用插件)
DeepSeek Harness(DSH)是DeepSeek于2026年开源的MIT协议AI Agent框架,支持插件化组装模型、工具、沙箱与UI,兼容主流大模型。本文提供免Node.js的桌面端安装包(Win/macOS),含详细图文教程及热门插件推荐。
4060 48
|
11天前
|
iOS开发 Docker MacOS
【2026实测】Docker Desktop下载、安装、汉化、配置教程(附官网安装包)
Docker Desktop 是 Docker 官方推出的桌面容器管理工具,集成引擎、CLI、图形界面与 Kubernetes,支持 Win/macOS/Linux。2026 最新版 4.88.1 强化 ARM 原生运行、镜像加速及资源可视化,附中文汉化与国内镜像配置指南。
1895 6
|
5天前
|
云安全 人工智能 安全
|
5天前
|
存储 弹性计算 人工智能
2026 年阿里云双十一活动入口攻略,新客服务器优惠通道、三大会场入口梳理
综合来看,2026年阿里云双十一活动入口清晰: 阿里云轻量应用服务器、阿里云ECS云服务器、阿里云GPU云服务器、阿里云百炼大模型服务平台 活动会场、综合权益中心、99计划专场三大入口覆盖服务器、AI权益与续费特价;新用户通过控制台首页banner、权益中心、产品页三处路径进入专属专场,老用户通过控制台弹窗和费用中心权益中心进入老客专区,企业用户做企业实名后解锁专属满减与阶梯折扣。
817 0
|
5天前
|
Linux 开发工具 iOS开发
2026最新codex下载安装保姆级使用教程(下载+安装+登录+使用,含所有历史版本)
本文详解OpenAI Codex国内快速上手指南:提供Win/macOS/Linux全平台免安装包、npm/Homebrew等多方式安装、账号/API Key双登录、简体中文切换,覆盖下载、安装、汉化、使用及高频避坑(如微软商店失败、npm超时等),10分钟即可跑通。
962 1
|
11天前
|
安全 算法 定位技术
《高性价比人生指南》完整原版:普通人用最少的资源,过好这一生的底层逻辑~How To Live Better
📖《高性价比人生指南》是一份基于实证、拒绝焦虑的生存手册,倡导以“人生时薪”为视角,重新计算时间、金钱与精力的成本与收益。它不承诺逆袭,只教人算清账:省下的钱若耗掉时间便亏;买体验比买物品更值;睡眠是最高杠杆的健康投资;关系贵在情绪价值而非表面热络;学习重在改变行为而非自我安慰。核心理念:用低成本、高回报的微小行动,换取长期的选择权——不是成为谁,而是掌控自己人生的主动权。
2132 6
|
云安全 安全 网络安全
|
24天前
|
人工智能 API 开发工具
DeepSeek Harness 神插件:白嫖 13 家大厂模型
`dsh-our-free-model` 是 DeepSeek Harness 神级插件:零配置、零API Key、零账号,聚合13家大厂免费模型(含DeepSeek V4.1 Flash、Kimi K3等),支持本地网关、用量看板与自动降级,真正实现“白嫖即用”。
4222 56