【问题标题】:Spring FlatFileReader Jagged CSV fileSpring FlatFileReader 锯齿状 CSV 文件
【发布时间】:2015-10-14 03:18:56
【问题描述】:

我正在通过 Spring Batch 读取数据,并将其转储到数据库表中。

我的音乐事实 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;
  }

我需要做什么?

【问题讨论】:

    标签: spring csv spring-batch


    【解决方案1】:

    编写您自己的线映射器。在我看来,你没有任何复杂的逻辑。

    类似这样的:

    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;
       }
    }
    

    【讨论】:

    • 哦,壮观。谢谢,我还在弄清楚所有这些活动部件是如何组合在一起的,所以我什至没有意识到那是一个接口。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-02
    • 1970-01-01
    • 2017-03-21
    • 2020-04-02
    • 1970-01-01
    相关资源
    最近更新 更多