如何在使用java opencsv阅读时跳过csv标题中的其他(,)逗号
我使用OpenCSV4.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标题时出错因为当我们尝试映射标题时,它将基于分隔符(;)进行拆分然后值将为1。项目代码2。项目名称和3可见性,最后一个标题值包含其他字符,这就是为什么它无法将标题名称从可见性映射到可见性,
注意:这里是输入文件中逗号(,)的问题。我不能限制用户上传值中有逗号的文件
在映射头时有没有办法解决这个问题
# 1 楼答案
目前已找到一些快速解决方案,但尚未找到问题的完整解决方案。当我们写入csv文件时,我添加了额外的分隔符(;)在(\n)结束行之前的行结束处
已从withLineEnd(“\n”)更改为withLineEnd(;\n”)。这将在行尾添加额外的分隔符。之后,文件下载如下
如果我们使用excel编辑器编辑文件,则会在行尾追加其他字符,而不是在现有标题上。例如,在编辑文件后,它显示如下
当我们映射到标题时,它会像下面这样拆分标题行
我知道这不是一个完整的解决方案。如果您还有其他想法,请与我们分享