在 java 开发中,csv(逗号分隔值)作为一种轻量级、跨平台的通用数据格式,广泛用于报表导出、数据迁移和系统间数据交互等场景。虽然看似简单,但生产级应用中往往需要处理特殊字符转义、编码适配等问题,手动实现不仅代码繁琐,还容易出现兼容性隐患。本文将介绍如何利用 spire.xls for java 库,通过三种方式创建 csv 文件:从零构建、从数组批量写入,以及将现有 excel 文件转换为 csv。
该库的一个特点是独立于本地安装的 microsoft office 环境运行,可以在服务器端或没有图形界面的 linux 环境中部署和使用。
环境配置
在开始之前,需要在 java 项目中引入 spire.xls for java。如果使用 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>对于非 maven 项目,可以手动下载 jar 包并添加到项目的构建路径中。
方式一:从零构建基础 csv 文件
这是最基础的使用方式,适用于从头创建数据量较小的 csv 文件。核心思路是创建一个 workbook 实例,通过 worksheet 向单元格写入数据,最后调用 savetofile() 方法导出为 csv。
import com.spire.xls.*;
import java.nio.charset.charset;
public class createbasiccsv {
public static void main(string[] args) {
// 创建 workbook 实例
workbook workbook = new workbook();
// 获取第一个工作表
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("a2").setnumbervalue(1001);
sheet.getcellrange("b2").setvalue("无线鼠标");
sheet.getcellrange("c2").setnumbervalue(29.99);
sheet.getcellrange("d2").setnumbervalue(150);
sheet.getcellrange("a3").setnumbervalue(1002);
sheet.getcellrange("b3").setvalue("机械键盘");
sheet.getcellrange("c3").setnumbervalue(89.99);
sheet.getcellrange("d3").setnumbervalue(75);
// 将工作表另存为 csv 文件(逗号分隔 + utf-8 编码)
sheet.savetofile("商品信息.csv", ",", charset.forname("utf-8"));
// 释放资源
workbook.dispose();
}
}
核心 api 说明:
setvalue():向单元格写入文本值。setnumbervalue():向单元格写入数值(支持整数和小数)。savetofile(filename, separator, charset):将工作表导出为 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);
// 定义表头
string[] headers = {"订单号", "顾客名", "订单金额", "状态"};
for (int i = 0; i < headers.length; i++) {
sheet.getcellrange(1, i + 1).setvalue(headers[i]);
}
// 批量数据
string[][] orderdata = {
{"ord001", "张三", "299.99", "已完成"},
{"ord002", "李四", "599.50", "已发货"},
{"ord003", "王五", "129.00", "已取消"}
};
// 遍历写入
int rownum = 2;
for (string[] rowdata : orderdata) {
for (int col = 0; col < rowdata.length; col++) {
sheet.getcellrange(rownum, col + 1).setvalue(rowdata[col]);
}
rownum++;
}
sheet.savetofile("订单信息.csv", ",", charset.forname("utf-8"));
workbook.dispose();
}
}
与逐个单元格赋值相比,遍历数组的方式更适合处理批量数据,且可以灵活适配 list<list<string>> 或其他动态数据源。
方式三:从 excel 转换为 csv
当已有 excel 格式的数据需要导出为 csv 用于数据迁移或系统导入时,可以通过 loadfromfile() 加载 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 → 定位工作表 → 调用 savetofile() 导出。该库还支持反向操作,即将 csv 转换为 excel 工作簿,以便对纯文本数据应用样式、公式等功能。
注意事项
特殊字符处理:当数据包含逗号或双引号时,库会自动按照 rfc 4180 规范进行转义,无需手动处理。例如:sheet.getcellrange("a1").setvalue("包含,逗号与\"引号\"的文本");
自定义分隔符与编码:除标准逗号外,该库还支持分号(欧洲地区常用)、制表符等分隔符,以及 utf-8、utf-16、gb2312 等编码:
// 使用分号分隔 + utf-16 编码
sheet.savetofile("数据.csv", ";", charset.forname("utf-16"));
// 使用制表符生成 tsv 文件
sheet.savetofile("数据.tsv", "\t", charset.forname("utf-8"));
资源释放:操作完成后调用 workbook.dispose() 有助于及时释放文件句柄和内存资源。
多工作表导出限制:csv 格式本质上是纯文本的单表格式,无法在一个文件中保存多个工作表。如需导出多个工作表,需要分别为每个工作表调用 savetofile() 生成独立的 csv 文件。
授权说明:该库提供免费版本供开发测试使用,免费版对某些功能或文件处理规模可能存在限制。在项目集成前,建议查阅其授权条款确认是否符合使用场景。
总结
通过 spire.xls for java 提供的 worksheet 操作和 savetofile() 方法,可以相对简洁地实现从零构建 csv、从数组批量写入以及 excel 转 csv 三种场景。这种方法避免了手动处理字符串拼接、特殊字符转义和编码问题的复杂性,适合在自动化脚本或服务端应用中使用。实际使用时,可以根据数据来源和规模选择合适的方式,并留意资源释放与授权条款等细节。
到此这篇关于java创建csv文件的三种实用方法详解的文章就介绍到这了,更多相关java创建csv文件内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论