我正在使用Univocity库来解析CSV,它工作得很好,但我需要一种方法来检测被解析的文件中的列是否比所需的少
例如,如果我期待一个3列文件,其中列映射到H1、H2、H3,那么我收到一个文件(它没有标题),看起来像
V1_H1,V1_H2
V2_H1,V2_H2在使用时
record.getString("H3");这将返回空,相反,我需要这个文件要么无法被解析,要么我可以检查它是否遗漏了一个列并停止处理它。
有办法做到这一点吗?
发布于 2019-06-28 15:17:02
因此,由于我在这里的主要问题是确保标头计数与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");
}这对我有用,不确定是否有更好的方法。
发布于 2019-06-27 14:35:42
我看过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;这也将帮助您使用对象,而不是必须使用字段。
希望这有帮助:)
https://stackoverflow.com/questions/56792683
复制相似问题