Univocity-解析CSV时检测缺少的列

时间:2019-06-27 13:58:12

标签: java univocity

我正在使用Univocity库解析CSV,并且效果很好,但是我需要一种方法来检测正在解析的文件的列数是否少于要求的

例如,如果我期望一个3列的文件,且列映射到[H1,H2,H3],那么我收到的文件(没有标题)看起来像

V1_H1,V1_H2
V2_H1,V2_H2

使用

record.getString("H3");

这将返回 null ,相反,我需要此文件无法解析,或者我可以检查其是否缺少列并停止处理

有什么办法可以做到这一点?

2 个答案:

答案 0 :(得分:2)

因此,由于我的主要问题是确保标头计数与CSV文件中提供的列数相同,并且由于我使用迭代器来遍历记录,因此添加了检查喜欢:

CsvParser parser = new CsvParser(settings);
ResultIterator<Record, ParsingContext> iterator = parser.iterateRecords(inputStream).iterator();
if(iterator.getContext().parsedHeaders().length != settings.getHeaders().length){
    throw new Exception("Invalid file");
}

它对我有用,不确定是否有更好的方法可以做到。

答案 1 :(得分:1)

我看过Univocity文档,发现here可以将注释添加到要从CSV输入生成的目标对象中

    @Parsed
    @Validate
    public String notNulNotBlank; //This should fail if the field is null or blank

    @Parsed
    @Validate(nullable = true)
    public String nullButNotBlank;

    @Parsed
    @Validate(allowBlanks = true)
    public String notNullButBlank;

这还将帮助您使用对象,而不必使用字段。

希望有帮助:-)