spring批量FlatFileItemReader用方括号包装项目,例如[项目]?

时间:2014-04-24 07:47:21

标签: java spring spring-batch

我的文件格式如下。每行都有单个项目,例如

RIC1
RIC2
RIC3
.
.
.
so on

我使用FlatFileItemReader来读取这些项目。这是配置

<beans:bean id="myLineMapper"
    class="com.st.batch.foundation.MyLineMapper" />

<beans:bean id="myFileItemReader"
    class="org.springframework.batch.item.file.FlatFileItemReader"
    p:resource="file:${spring.tmp.batch.dir}/somename-#{jobParameters[date]}/items.txt"
    p:lineMapper-ref="myLineMapper" scope="step" />

这是我的线路映射器,

public class MyLineMapper implements LineMapper<List<String>> {

    public List<String> mapLine(String line, int lineNumber) throws Exception {
        List<String> list = new ArrayList<String>();        
        list.add(line.trim());
        return list;
    }

}

在我的项目编写器中,我得到的项目用方括号括起来。我不知道这些括号的添加位置在哪里?

public class ImportExchangeItemWriter<T> implements ItemWriter<T>{

    public void write(List<? extends T> items) throws Exception {
        for (T item : items) {
            System.out.println(item);

        }

}

以下是输出:

[RIC1]
[RIC2]
[RIC3]
.
.
.
so on

如何将这些括号添加到项目中?有没有办法删除它?

3 个答案:

答案 0 :(得分:0)

使用

工作

我不需要创建自定义行映射器,有默认实现org.springframework.batch.item.file.mapping.PassThroughLineMapper。

答案 1 :(得分:0)

这种情况正在发生,因为您错过了FieldSetMapper来将您看到的列表内容映射到您想要的第一个也是唯一的元素。

public class MyFieldSetMapper implements FieldSetMapper<String> {
    @Override
    public String mapFieldSet(FieldSet fieldSet) throws BindException {
        String myItem = fieldSet.readString(0);
        return myItem;
    }
}

并在XML配置中使用期望DefaultLineMapper的{​​{1}}:

FieldSetMapper

答案 2 :(得分:0)

您可以使用这些方括号,因为LineMapper方法中的mapLine()会返回List<String>。因此,正在阅读的每一行都被视为List<String>。在Java中,打印List默认使用方括号来分隔列表的内容。