sybn sybn-util 项目说明文档 - 基于java的跨数据库联合查询

CsvPrintUtil CSV打印工具

2026-02-02
sybn

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 智能代码补全,异常报错排查 专业开发者,提升代码质量

Similar Posts

Comments

暂不开放评论! 可微信联系