我正在使用Univocity库解析CSV,并且效果很好,但是我需要一种方法来检测正在解析的文件的列数是否少于要求的
例如,如果我期望一个3列的文件,且列映射到[H1,H2,H3],那么我收到的文件(没有标题)看起来像
V1_H1,V1_H2
V2_H1,V2_H2
使用
record.getString("H3");
这将返回 null ,相反,我需要此文件无法解析,或者我可以检查其是否缺少列并停止处理
有什么办法可以做到这一点?
答案 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;
这还将帮助您使用对象,而不必使用字段。
希望有帮助:-)