CsvPrintUtil 是一个用于生成和操作CSV文件的工具类,基于Apache Commons CSV库实现,支持将集合数据导出为CSV格式,并提供多种输出方式。 一般用于打印数据,如数据库查询结果、业务数据等。
功能说明
基础CSV生成
import cn.sybn.util.io.csv.CsvPrintUtil;
// 将数据集合转换为CSV字符串
Collection<Map<String, Object>> list = Arrays.asList(
MB.n("name", "张三", "age", 25),
MB.n("name", "李四", "age", 30)
);
String csvString = CsvPrintUtil.printCsvToString(list, false);
// 将BigDecimal数字格式正确输出(避免科学计数法)
List<Map<String, Object>> bigDecimalList = new ArrayList<>();
bigDecimalList.add(MB.n("value", new BigDecimal("0.00000001")));
String csvWithBigDecimal = CsvPrintUtil.converCsvToString(bigDecimalList, false);
文件输出操作
// 保存CSV到文件
boolean success = CsvPrintUtil.saveCsv("/path/to/file.csv", list);
// 保存CSV到文件并控制列排序
boolean success = CsvPrintUtil.saveCsv("/path/to/file.csv", list, true);
// 保存CSV到文件并添加UTF-8 BOM头
boolean success = CsvPrintUtil.saveCsv("/path/to/file.csv", list, false, true);
// 直接写入文件
File outputFile = new File("/path/to/output.csv");
CsvPrintUtil.printCsv(outputFile, list, false);
// 写入文件并指定列顺序
CsvPrintUtil.printCsv(outputFile, list, "name", "age");
// 追加数据到现有CSV文件
CsvPrintUtil.appendCsv(outputFile, list, false);
流式输出
// 输出到Appendable对象
StringBuilder sb = new StringBuilder();
CsvPrintUtil.printCsv(sb, list, false);
// 输出到OutputStream
OutputStream outputStream = new FileOutputStream("/path/to/stream.csv");
CsvPrintUtil.printCsv(outputStream, list, false);
// 追加模式输出到流
CsvPrintUtil.appendCsv(outputStream, list, false);
特殊功能
BOM头支持
// 添加UTF-8 BOM头以确保在Office软件中正确显示中文
File file = new File("/path/to/bom_file.csv");
CsvPrintUtil.printCsv(file, list, false, true); // 第四个参数为true表示添加BOM
// 或者手动添加BOM
try (Writer w = new OutputStreamWriter(Files.newOutputStream(file.toPath()))) {
w.write('\uFEFF'); // BOM字符
CsvPrintUtil.printCsv(w, list, false);
}
特殊字符处理
// 正确处理包含换行符和引号的数据
List<Map<String, Object>> specialCharsList = JsonTools.parseJsonToListMap(
"[{a:'\\r\\n',b:'\"\\''}]"
);
String result = CsvPrintUtil.printCsvToString(specialCharsList, false);
// 输出结果会正确转义特殊字符
主要方法
saveCsv(String filePath, Collection<V> list)- 保存数据到CSV文件printCsv(Appendable out, Collection<V> list, boolean resortColumn)- 输出CSV到Appendable对象printCsvToString(Collection<V> list, boolean resortColumn)- 转换数据为CSV字符串converCsvToString(Collection<V> list, boolean resortColumn)- 将数据转换为CSV字符串格式appendCsv(File out, Collection<V> list, boolean resortColumn)- 追加数据到CSV文件(不包含表头)
应用场景
- 数据导出: 将数据库查询结果、业务数据等导出为CSV格式
- 报表生成: 生成统计报表供用户下载
- 数据备份: 将重要数据备份为CSV格式
- 数据迁移: 在不同系统间传输结构化数据
注意事项
- 默认使用UTF-8编码输出CSV文件
- 如需在Microsoft Office中正确显示中文,建议添加BOM头
- 支持BigDecimal等数值类型的正确格式化输出
- 自动处理包含特殊字符(如换行符、引号等)的数据
- 提供追加模式,可向已有CSV文件追加数据而不重复表头
设计模式对比
| 模式 | 描述 | 工具示例 | 特点 |
|---|---|---|---|
| 纯文字描述 | 通过自然语言描述多轮对话流程,一次性写出操作规范 | 扣子编程 | 快速原型,适合非技术人员 |
| 在线工作流 | 图形化拖拽节点,每个节点用文字描述处理步骤 | 扣子编程 | 直观易懂,支持团队协作 |
| 编程构建 | 使用Java/Python编写代码,实现复杂逻辑和判断 | Lingma, Cursor | 功能强大,适合专业开发 |
工具特性对比
| 工具 | 主要优势 | 适用人群 |
|---|---|---|
| 扣子编程 | 图形化界面,AI辅助生成提示词和代码 | 非技术人员,快速原型开发 |
| Lingma | 实时续写,自然语言生成代码,单元测试生成 | 专业开发者,提高编码效率 |
| Cursor | 智能代码补全,异常报错排查 | 专业开发者,提升代码质量 |