Spring 批处理 FlatFileItemWriter - 输出自定义

Spring Batch FlatFileItemWriter - output customization

我需要生成符合以下要求的 CSV 文件:

输入:

预期输出:

"Field1"|"Field2With\Backslash\"DoubleQuotes\"And|Pipe"|"Field3"

是否可以得到这样的输出?

基本上,您只想在编写字段之前对其进行处理。你可以用这两种方式

假设此方法处理您的字段

public String escape(String str) {
    str = "\"" + str + "\"";
    str = str.replace("|", "\|");
    str = str.replace("\", "\\");
    return str;
}

1 - 在处理器中处理它 - 首选

@Override
public A process(B b) throws Exception {
    A a = new A();
    //Process b to a...    

    a.setField1(escape(a.getField1)); //For each fields
    return a;
}

2 - 在写入自定义 Writer 之前对其进行处理

public class EscapeFlatFileItemWriter<A> extends FlatFileItemWriter<A> {

    @Override
    public void write(List<? extends A> items) throws Exception {
        for (A a : items) {
            a.setField1(escape(a.getField1)); //For each fields
        }
        super.write(items);
    }
}

最佳解决方案是在 DelimitedLineAggregator 的子类中实现引用和转义。