我正在尝试使用HeaderColumnNameMappingStrategy使用opencsv读取csv文件。 Opencsv每次都将我的第一列csv填充为null。 这是我的代码:
实体类:
@Entity
@Table(name = "MyEntity")
public class MyEntity {
@CsvBindByName(column = "status", required = true)
@Column(name = "status", length = 5, nullable = false)
private String status;
@CsvBindByName(column = "type", required = true)
@Column(name = "type", length = 5, nullable = false)
private String type;
@CsvBindByName(column = "percentage", required = true)
@Column(name = "percentage", nullable = false)
private Integer percentage;
@Column(name = "date", nullable = false)
@CsvBindByName(column = "date", required = true)
@CsvDate(value = "yyyy-MM-dd")
private Date date;
}
阅读逻辑:
final HeaderColumnNameMappingStrategy<MyEntity> mpngInfo= new HeaderColumnNameMappingStrategy<>();
mappingInfo.setType(MyEntity.class);
final CsvToBean<MyEntity> csvToBean = new CsvToBean<>();
File file = new File(<path>);
CSVReader reader = new CSVReader(new FileReader(file),';');
final List<MyEntity> list = csvToBean.parse(mpngInfo, reader, true);
//here in list the first column is always populated as null.
我的CSV:
型;状态;百分比;日期 ACTIVE;美元; 25; 2014年1月1日 ACTIVE; GBP; 25; 2014年1月1日
注意:即使我用'百分比'切换'type',它也会开始将百分比填充为null,因为'percentage'列成为第一列。
我弄清楚了文件第一个字符的问题。 在我的情况下,它是“”类型;状态;百分比;日期
问题列在这里: First character of the reading from the text file : 
我如何在opencsv中解决这个问题?有什么建议吗?
答案 0 :(得分:3)
我遇到了同样的问题。
我通过utf-8 再次保存了csv文件,没有BOM 然后第一列设置正确的值 没有代码需要更改 我使用名为sakura的文本编辑器。选择编码为utf-8后,启用BOM复选框。取消选中并保存csv文件。我认为其他编辑器具有相同的BOM选项。
BOM-ed UTF-8字符串将以以下三个字节开头。 EF BB BF
添加到csv文件的三个字节可能会更改您的第一个列名称。