Spring 批处理 FlatFileItemWriter - 输出自定义
Spring Batch FlatFileItemWriter - output customization
我需要生成符合以下要求的 CSV 文件:
- 每个字段都用双引号括起来
- 双引号用反斜杠转义
- 反斜杠用反斜杠转义
输入:
- 字段 1
- Field2With\Backslash"双引号"和|管道
- 字段 3
预期输出:
"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 的子类中实现引用和转义。
我需要生成符合以下要求的 CSV 文件:
- 每个字段都用双引号括起来
- 双引号用反斜杠转义
- 反斜杠用反斜杠转义
输入:
- 字段 1
- Field2With\Backslash"双引号"和|管道
- 字段 3
预期输出:
"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 的子类中实现引用和转义。