我正在使用 Univocity 库来解析 CSV,它运行良好,但我需要一种方法来检测正在解析的文件的列是否少于所需的列
例如,如果我期待一个 3 列文件,列映射到 [H1,H2,H3] 那么我收到一个文件(没有标题),看起来像
V1_H1,V1_H2
V2_H1,V2_H2
使用时
record.getString("H3");
这将返回null,相反,我需要这个文件要么无法解析,要么我可以检查它是否遗漏了一列并停止处理它
有什么办法可以做到这一点?
因此,由于我的主要问题是确保标题计数与 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");
}
它对我有用,不确定是否有更好的方法。
我看过 Univocity 文档,我发现这里有一种方法可以将注释添加到您要从 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;
这也将帮助您使用对象,而不必使用字段。
希望有帮助:-)