java - 带逗号的 OpenCSV 字段
问题描述
我正在创建一个 csv,其中字段可能包含逗号。在java中,写作是用opencsv完成的。
try (Writer fileWriter = Files.newBufferedWriter(Paths.get(filePath))) {
CSVWriter csvWriter =
new CSVWriter(
fileWriter,
ICSVWriter.DEFAULT_SEPARATOR,
ICSVWriter.NO_QUOTE_CHARACTER,
ICSVWriter.DEFAULT_ESCAPE_CHARACTER,
ICSVWriter.DEFAULT_LINE_END);
csvWriter.writeNext(headers);
csvWriter.writeAll(rows);
} catch (IOException e) {
throw new IOException(e);
}
所以像["field, 1", "field, 2", "field, 3"]
我期望得到一个专栏一样,"field, 1", "field, 2", "field, 3"
但我得到了field", 1,field", 2,field", 3
。
实际上,在 excel 中打开时逗号消失了,并且预期不会显示引号。我在 opencsv 上没有看到任何文档。
解决方案
一切看起来都不错,除了ICSVWriter.NO_QUOTE_CHARACTER
. 通过NO_QUOTE_CHARACTER
作为参数传递,您要求 OpenCSV 将引号视为文件中的常规文本,这就是它正在做的事情。
如果您确信双引号将成为您的引号字符,则可以将其更改为ICSVWriter.DEFAULT_QUOTE_CHARACTER
最后,您的代码段如下所示:
try (Writer fileWriter = Files.newBufferedWriter(Paths.get(filePath))) {
CSVWriter csvWriter =
new CSVWriter(
fileWriter,
ICSVWriter.DEFAULT_SEPARATOR,
ICSVWriter.DEFAULT_QUOTE_CHARACTER,
ICSVWriter.DEFAULT_ESCAPE_CHARACTER,
ICSVWriter.DEFAULT_LINE_END);
csvWriter.writeNext(headers);
csvWriter.writeAll(rows);
} catch (IOException e) {
throw new IOException(e);
}
推荐阅读
- laravel - 我尝试在组件 vue 中安装组件
- java - Android 应用程序具有外部 SD 卡写入权限,但我仍然无法修改文件
- flutter - 无需每次调用 `of(context)` 的本地化
- java - 有没有办法在junit和黄瓜中使用surefire-plugin报告?
- python - 我的 wx.OnPaint() 函数不会在 wx 主循环中不断调用
- perl - 从 rhel6 升级到 rhel8 后 Perl 代码崩溃
- python - python - pickle 引发“没有剩余空间”错误的原因?
- tslint - 打字稿:如何抑制任何分号警告
- codeigniter - 一个字段有 2 个可调用的表单验证规则
- python - Docker - 在服务之间共享本地存储