2015-10-14 85 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

哦壯觀。謝謝,我還在弄清楚所有這些運動部件如何配合在一起,所以我甚至沒有意識到這是一個界面。謝謝! –