2015-10-14 84 views
0

我正在通过spring批处理读取数据,我将它转储到数据库表中。Spring FlatFileReader锯齿形CSV文件

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

写你自己的线路图。据我所知,你没有任何复杂的逻辑。

事情是这样的:

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

哦壮观。谢谢,我还在弄清楚所有这些运动部件如何配合在一起,所以我甚至没有意识到这是一个界面。谢谢! –