OPENCSV将第一列填充为空

New*_*Bee 2 opencsv

我正在尝试使用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;
}
Run Code Online (Sandbox Code Playgroud)

阅读逻辑:

 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.
Run Code Online (Sandbox Code Playgroud)

我的CSV:

类型;状态;百分比;日期有效;美元; 25; 2014-01-01活动; GBP; 25; 2014-01-01

注意:即使我将“类型”切换为“百分比”,它也会开始将百分比填充为空,因为“百分比”列成为第一列。

我发现了文件第一个字符的问题。在我的情况下,它是“”类型;状态;百分比;日期

问题在此处列出: 从文本文件中读取的第一个字符:

如何在opencsv中解决此问题?有什么建议么 ?

End*_*der 5

我遇到了同样的问题。

没有BOM再次通过utf-8保存了csv文件。
然后,将第一列设置为正确的值。
无需更改任何代码。
我使用名为sakura的文本编辑器。选择编码为utf-8后,启用了BOM表的复选框。取消选中该复选框并保存csv文件。我认为其他编辑器具有相同的BOM选项。

原因

BOM格式的UTF-8字符串将从以下三个字节开始。EF BB高炉

添加到csv文件中的三个字节可能会更改您的第一列名称。