java - 如何在使用 java opencsv 阅读时跳过 csv 标头中的附加 (,) 逗号
问题描述
我正在使用 OpenCSV 4.6 来读取和写入 csv 文件。我有一个类似的java bean
public class CMMProjectInfo implements Serializable {
private static final long serialVersionUID = 1L;
@CsvBindByName(column = "ProjectName",required = true)
private String projectName;
@CsvBindByName(column = "ProjectCode",required = true)
private String projectCode;
@CsvBindByName(column = "Visibility",required = true)
private String visibility;
}
如果用户上传有效的 csv 文件,如下所示
ProjectCode;ProjectName;Visibility
T1;Test, 1;1
T2;Test2;0
TST;Test3;1
我们可以使用HeaderColumnNameMappingStrategy将标题映射到对象。如果用户使用 excel 编辑器编辑 csv 文件,则文件将如下更改(它附加了额外的字符(和“ ))
ProjectCode;ProjectName;Visibility,
T1;Test,1;1
T2;Test2;0,
TST;Test3;1,
现在,如果用户上传了由 excel 文件编辑的文件,则无法映射标题并出现错误 捕获 CSV 标题时出错!因为当我们尝试映射标头时,它将基于 delimiter(;) 进行拆分,然后值将是 1. ProjectCode 2. ProjectName 和 3. Visibility,最后一个标头值具有其他字符,这就是它无法将标头名称从Visibility映射到Visibility的原因,
注意:这里输入文件中的逗号(,)有问题。我不能限制用户上传值中有逗号的文件。
映射标头时有什么方法可以解决此问题?
解决方案
目前找到了一些快速解决方案,但不是完整的问题解决方案。当我们写入 csv 文件时,我在行的末尾添加了额外的分隔符 (;) before(\n) 结束行。
StatefulBeanToCsv beanWriter = builder
.withApplyQuotesToAll(false)
.withSeparator(';')
.withMappingStrategy(new AnnotationStrategy(this.inputData.iterator().next().getClass()))
.withLineEnd(";\n")
.build();
从 withLineEnd("\n") 更改为 withLineEnd(";\n")。这将在行尾添加额外的分隔符。下载该文件后,如下所示
ProjectCode;ProjectName;Visibility;
T1;Test, 1;1;
T2;Test2;0;
TST;Test3;1;
如果我们使用 excel 编辑器编辑文件,则附加字符将附加在行尾而不是现有标题上。例如在编辑文件后它显示如下
ProjectCode;ProjectName;Visibility;,
T1;Test,1;1;
T2;Test2;0;,
TST;Test3;1;,
当我们映射到标题时,它会拆分标题行,如下所示
- ProjectCode 2. ProjectName 3.Visibility 和 4.",即使我们现在获得了额外的标题HeaderColumnNameMappingStrategy能够正确映射标题。
我知道这不是完整的解决方案。如果您还有其他想法,请分享
推荐阅读
- types - OCaml 中的函数,它接受一个整数输入并返回给定的前一个值
- git - 在 git repo 中重命名文件并保留文件的作者?
- python - 使用新索引一次性向多列添加值 - 熊猫
- json - json字典中第一次出现的元素与jq
- javascript - 用于检查 HTML 中的更改的开发工具
- javascript - php 无法从 html 中获取值
- android-studio - 我是 Android Studio 的新手,我正在创建一个壁纸应用程序,但我希望壁纸在一定时间后自动更改
- python - 使用 Python 绘制每行数据框的折线图
- html - 尝试使用 id 元素在外部 Css 中插入图片,解决方案无效
- javascript - 确保文件的异步加载和函数的执行