如何使MappingIterator不包含空行?

时间:2019-04-05 14:08:05

标签: java parsing data-binding

感谢您对此的关注。

我正在解析csv文件,并遇到一个问题,如果文件末尾包含空白行,则会造成问题。一种简单的解决方法是只删除文件末尾的空白行,但我宁愿知道如何配置它以忽略末尾的空白行(如果存在)。

我已经在这里转录了其他系统的代码,以显示我如何创建MappingIterator

对于有效的数据行,它可以正常运行,但是我遇到了一个问题,如果csv文件的文件末尾包含空行,我将得到空指针异常。

mappingIterator的空白行将包含col_a键,其键值为空,并且没有其他内容。

我该如何忽略空白行?

这是一个代码示例

private MappingIterator getMappingIteratorCsv(InputStream inputStream) {
    logger.info("Processing ");

    CsvMapper mapper = new CsvMapper();
    mapper.enable(CsvParser.Feature.SKIP_EMPTY_LINES);
    mapper.enable(CsvParser.Feature.WRAP_AS_ARRAY);

    CsvSchema.Builder schemaBuilder = CsvSchema.builder().setColumnSeparator(',');
    schemaBuilder.addColumn("col_a");
    schemaBuilder.addColumn("col_b");
    schemaBuilder.addColumn("col_c");

    CsvSchema schema = schemaBuilder.build();

    MappingIterator<Map<String, String>> mappingIterator;

    mappingIterator = mapper.readerFor(Map.class).with(schema).readValues(inputStream);

    return mappingIterator;
}

1 个答案:

答案 0 :(得分:1)

您要配置的功能似乎已经提出,但尚未实现:

https://github.com/FasterXML/jackson-dataformats-text/issues/15

所以我认为,如果您不想继续为该项目提供修复,则必须先清除输入内容:-)

干杯,安德斯