Spring FlatFileReader Jagged CSV文件

时间:2015-10-14 03:18:56

标签: spring csv spring-batch

我通过spring批处理读取数据,并且我将它转储到数据库表中。

我的音乐事实的csv文件格式如下:

question; valid answer; potentially another valid answer; unlikely, but another;

如果所有行都有问题且至少有一个有效答案,但可能会有更多。保存此数据的简单方法是在pojo中的数据中包含String的一个字段和List<String>的另一个字段。

下面是一个简单的线条映射器来读取CSV文件,但我不知道如何进行必要的更改以便以这种方式容纳锯齿状的CSV文件。

  @Bean
  public LineMapper<MusicalFactoid> musicalFactoidLineMapper() {
    DefaultLineMapper<MusicalFactoid> musicalFactoidDefaultLineMapper = new DefaultLineMapper<>();
    musicalFactoidDefaultLineMapper.setLineTokenizer(new DelimitedLineTokenizer() {{
      setDelimiter(";");
      setNames(new String[]{"question", "answer"}); // <- this will not work!
    }});
    musicalFactoidDefaultLineMapper.setFieldSetMapper(new BeanWrapperFieldSetMapper<MusicalFactoid>() {{
      setTargetType(MusicalFactoid.class);
    }});

    return musicalFactoidDefaultLineMapper;
  }

我需要做什么?

1 个答案:

答案 0 :(得分:1)

编写自己的Line Mapper。据我所知,你没有任何复杂的逻辑。

这样的事情:

public MyLineMapper implements LineMapper<MusicalFactoid> {
  public MusicalFactoid mapLine(String line, int lineNumber) {
     MusicalFactoid dto = new MusicalFactoid();
     String[] splitted = line.split(";");

     dto.setQuestion(splitted[0]); 
     for (int idx = 1; idx < splitted.length; idx++) {
        dto.addAnswer(splitted[idx]); 
     }

      return dto;
   }
}