
CSV 作为轻量级、跨平台的通用数据格式,是 Java 开发中报表导出、数据迁移、系统间数据交互的主流选择。但看似简单的 CSV 格式,在生产级开发中往往暗藏诸多问题:逗号、换行符、双引号等特殊字符会破坏文件结构,多语言场景下编码错误会导致乱码,手动处理格式规则不仅开发成本高,还容易出现兼容性隐患。
Spire.XLS for Java 提供了简洁且高可靠性的 CSV 处理 API,可自动完成格式转义、编码适配等底层工作,大幅降低 CSV 生成的开发与测试成本。本文将系统讲解如何基于 Java 创建 CSV 文件,覆盖基础文件生成、结构化批量导出、Excel 转 CSV 转换,以及特殊字符处理、自定义分隔符等进阶用法。
- 为什么选择 Spire.XLS for Java 来创建 CSV 文件
- 使用 Java 创建基础 CSV 文件
- 使用 Java 从数组创建结构化 CSV 文件
- 使用 Java 将 Excel 转换为 CSV 文件
- 高级 CSV 生成技巧
- 常见问题解答
为什么选择 Spire.XLS for Java 来创建 CSV 文件
对比原生 Java IO、Apache POI 及其他 Java CSV 库,Spire.XLS for Java 在 CSV 处理场景下具备以下核心优势
- 简化的 API:仅需几行代码即可创建和写入 CSV 文件,无需手动执行流操作或底层格式处理工作。
- 自动格式处理:自动对逗号、双引号、换行符等特殊字段进行转义处理。
- 完整的编码支持:原生支持 UTF-8、UTF-16、GB2312 等编码,避免中文及特殊文本出现乱码。
- 双格式兼容:同时支持 Excel(XLS/XLSX)和 CSV 格式,可实现电子表格与分隔文本之间的双向转换。
- 轻量无依赖:轻量级库,无第三方依赖冲突,适用于 Java Web、桌面应用和微服务项目。
环境准备:集成 Spire.XLS for Java
要开始使用 Java 写入 CSV 文件,首先需要将该库集成到项目中,支持 Maven 依赖引入和手动安装 JAR 包两种方式。
1. Maven 依赖引入(推荐)
将以下仓库和依赖添加到项目的 pom.xml 文件中:
<repositories>
<repository>
<id>com.e-iceblue</id>
<name>e-iceblue</name>
<url>https://repo.e-iceblue.com/nexus/content/groups/public/</url>
</repository>
</repositories>
<dependency>
<groupId>e-iceblue</groupId>
<artifactId>spire.xls</artifactId>
<version>16.4.1</version>
</dependency>
2. 手动安装 JAR 包
对于非 Maven 项目可从 Spire.XLS for Java 官网下载 JAR 文件,并将其添加到项目的构建路径中。
使用 Java 创建基础 CSV 文件
这是最基础的使用场景,适用于数据量小、结构简单的 CSV 生成需求。以下示例将创建一个商品信息 CSV 文件,包含表头与多行数据,默认使用逗号分隔符与 UTF-8 编码。
import com.spire.xls.*;
import java.nio.charset.Charset;
public class CreateBasicCSV {
public static void main(String[] args) {
// 创建 Workbook 实例
Workbook workbook = new Workbook();
// 获取第一个工作表(索引为 0)
Worksheet sheet = workbook.getWorksheets().get(0);
// 写入表头行
sheet.getCellRange("A1").setValue("ID");
sheet.getCellRange("B1").setValue("商品名");
sheet.getCellRange("C1").setValue("价格");
sheet.getCellRange("D1").setValue("数量");
sheet.getCellRange("E1").setValue("品类");
// 写入数据行
sheet.getCellRange("A2").setNumberValue(1001);
sheet.getCellRange("B2").setValue("无线鼠标");
sheet.getCellRange("C2").setNumberValue(29.99);
sheet.getCellRange("D2").setNumberValue(150);
sheet.getCellRange("E2").setValue("电子产品");
sheet.getCellRange("A3").setNumberValue(1002);
sheet.getCellRange("B3").setValue("机械键盘");
sheet.getCellRange("C3").setNumberValue(89.99);
sheet.getCellRange("D3").setNumberValue(75);
sheet.getCellRange("E3").setValue("电子产品");
sheet.getCellRange("A4").setNumberValue(1003);
sheet.getCellRange("B4").setValue("办公椅");
sheet.getCellRange("C4").setNumberValue(199.99);
sheet.getCellRange("D4").setNumberValue(30);
sheet.getCellRange("E4").setValue("家具");
// 将工作表另存为 CSV 文件(逗号分隔符 + UTF-8 编码)
sheet.saveToFile("商品信息.csv", ",", Charset.forName("UTF-8"));
// 释放资源
workbook.dispose();
}
}
核心 API 说明:
setValue():向单元格中写入文本或字符串值。setNumberValue():向单元格中写入数值(支持整数、小数)。saveToFile(filename, separator, charset):将工作表导出为 CSV 文件,可自定义分隔符和编码。
在 Excel 中打开生成的 CSV 文件:

拓展:Spire.XLS for Java 同时支持 Java 读取 CSV 文件,单一库即可完成 CSV 的读写双向处理。
使用 Java 从数组创建结构化 CSV 文件
在实际开发中,通常需要将业务数据(如用户列表、订单记录)批量写入 CSV 文件。本示例演示如何利用一维和二维数组,创建包含固定表头和批量结构化数据的标准化 CSV 文件。
import com.spire.xls.*;
import java.nio.charset.Charset;
public class CreateStructuredCSV {
public static void main(String[] args) {
Workbook workbook = new Workbook();
Worksheet sheet = workbook.getWorksheets().get(0);
// 定义 CSV 表头行
String[] headers = {"订单号", "顾客名", "订单金额", "订单日期", "订单状态"};
for (int i = 0; i < headers.length; i++) {
sheet.getCellRange(1, i + 1).setValue(headers[i]);
}
// 批量写入订单数据
String[][] orderData = {
{"ORD001", "张三", "299.99", "2026-06-01", "已完成"},
{"ORD002", "李四", "599.50", "2026-06-05", "已取消"},
{"ORD003", "王五", "129.00", "2026-06-08", "已发货"}
};
// 遍历并写入批量数据
int rowNum = 2;
for (String[] rowData : orderData) {
for (int col = 0; col < rowData.length; col++) {
sheet.getCellRange(rowNum, col + 1).setValue(rowData[col]);
}
rowNum++;
}
// 保存结构化 CSV 文件
sheet.saveToFile("订单信息.csv", ",", Charset.forName("UTF-8"));
workbook.dispose();
}
}
与逐个写入单元格的方式相比,数组遍历的写法更适合批量数据导出,且可无缝适配 List<List<String>>、实体类集合等动态数据源,仅需调整数据遍历逻辑即可。
生成效果:

使用 Java 将 Excel 转换为 CSV 文件
当已有 Excel 格式的数据,需要导出为 CSV 格式用于数据迁移或系统导入时,仅需三行核心代码即可完成转换。
import com.spire.xls.*;
import java.nio.charset.Charset;
public class ExcelToCSV {
public static void main(String[] args) {
// 加载 Excel 文件
Workbook workbook = new Workbook();
workbook.loadFromFile("示例.xlsx");
// 获取第一个工作表
Worksheet sheet = workbook.getWorksheets().get(0);
// 将工作表另存为 CSV
sheet.saveToFile("转换结果.csv", ",", Charset.forName("UTF-8"));
workbook.dispose();
}
}
核心逻辑十分简单:加载 Excel 文件 → 定位到指定工作表 → 调用转换 API 另存为 CSV。
Excel 转 CSV 效果:
反向操作:你也可以实现 CSV 文件转 Excel 工作簿,为纯文本 CSV 数据添加样式、公式、多工作表等高级能力。
高级 CSV 生成技巧
1. 处理特殊字符
CSV 格式中,逗号、双引号属于特殊字符,手动处理不当会导致列错位、数据错乱。Spire.XLS for Java 严格遵循 RFC 4180 规范,自动为包含特殊字符的字段添加双引号包裹,无需手动编写转义逻辑,完美兼容 Excel、WPS、各类数据导入工具。
代码示例:
// 内容包含逗号、双引号
sheet.getCellRange("A1").setValue("人体工学办公椅,静音滚轮 | \"2026新款·加大加宽款\"");

2. 自定义分隔符和编码
除标准逗号分隔符外,Spire.XLS for Java 支持自定义分隔符与编码格式,适配不同地区、不同系统的格式要求:
- 欧洲地区常用分号作为分隔符
- TSV(制表符分隔)文件常用于特定系统的数据导入
- 特殊业务系统可能要求 UTF-16 等编码格式
代码示例:
// 使用分号作为分隔符,UTF-16 作为编码
sheet.saveToFile("european_data.csv", ";", Charset.forName("UTF-16"));
// 使用制表符作为分隔符生成 TSV 文件
sheet.saveToFile("tab_separated.tsv", "\t", Charset.forName("UTF-8"));
常见问题解答
Q1. Spire.XLS for Java 是否需要安装 Microsoft Excel?
不需要。该库可完全独立运行,无任何 Office 依赖。
Q2. 能否向已有 CSV 文件末尾追加数据?
可以。实现逻辑为:加载现有 CSV 文件到工作表中,定位到最后一行已使用数据的行号,从下一行开始写入新数据,最后重新保存文件即可。
Q3. 能否将多个工作表导出到单个 CSV 文件中?
不能。CSV 本质上是纯文本的单工作表格式。每次调用 saveToFile() 方法只会将一个工作表导出为一个 CSV 文件。若要导出多个工作表,需为每个工作表分别调用保存方法,生成独立的 CSV 文件。
Q4. 该组件的授权模式是怎样的?
Spire.XLS for Java 提供商业版和免费版。免费版虽有一定的使用限制,但完全支持基础的 CSV 操作和轻量级电子表格处理任务。
总结
生成 CSV 文件是 Java 开发中一项常规但关键的任务。CSV 输出的质量和可靠性直接影响报表、系统迁移、数据分析等下游流程。要实现无错误的 CSV 生成,需要一个能自动处理格式、编码和特殊字符的库。
Spire.XLS for Java 恰好满足这一需求。通过本文提供的分步代码示例,开发者可以快速将可靠的 CSV 生成功能集成到 Java 项目中,提升开发效率,同时消除常见的格式缺陷和编码错误。 如需了解更多高级功能(如将 CSV 转换为 PDF),可查阅 Spire.XLS for Java 在线教程。







