Spring FlatFileReader 锯齿状 CSV 文件
Spring FlatFileReader Jagged CSV file
我正在通过 spring 批处理读取数据,我打算将其转储到数据库中 table。
我的音乐事实 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;
}
我需要做什么?
编写您自己的线映射器。据我所知,你没有任何复杂的逻辑。
像这样:
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;
}
}
我正在通过 spring 批处理读取数据,我打算将其转储到数据库中 table。
我的音乐事实 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;
}
我需要做什么?
编写您自己的线映射器。据我所知,你没有任何复杂的逻辑。
像这样:
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;
}
}