我想创建一个具有以下格式的平面文件:
Col1Name;Col2Name;Col3Name
one;23;20120912
two;28;20120712
如图所示,平面文件中的第一行是列名。
如何通过标头回调来实现这一目标?
我看到如果输入文件的格式是以上格式,则有一个选项可以忽略第一行:
<property name="firstLineIsHeader" value="true"/>
此外,这个Jira Issue表示我想要的是实现和关闭。但是,我无法找到将第一行写为列名的任何示例。
<beans:bean id="MyFileItemWriter" class="com.nik.MyFileItemWriter" scope="step">
<beans:property name="delegate">
<beans:bean class="org.springframework.batch.item.file.FlatFileItemWriter">
<beans:property name="resource" value="file:MYFILE.dat" />
<beans:property name="lineAggregator">
<beans:bean class="org.springframework.batch.item.file.transform.DelimitedLineAggregator">
<beans:property name="delimiter" value=";" />
<beans:property name="fieldExtractor">
<beans:bean class="org.springframework.batch.item.file.transform.BeanWrapperFieldExtractor">
<beans:property name="names" value="Col1Name, Col2Name, Col3Name" />
</beans:bean>
</beans:property>
</beans:bean>
</beans:property>
<beans:property name="headerCallback" ref="MyFileItemWriter" />
</beans:bean>
</beans:property>
</beans:bean>
我的项目编写者如下所示:
public class MyFileItemWriter implements ItemWriter<MyBean>, FlatFileHeaderCallback, ItemStream{
private FlatFileItemWriter<MyBean> delegate;
public void setDelegate(final FlatFileItemWriter<MyBean> delegate) {
this.delegate = delegate;
}
public void writeHeader(Writer writer) throws IOException {
}
public void write(List<? extends MyBean> items) throws Exception {
this.delegate.write(items);
}
public void close() throws ItemStreamException {
this.delegate.close();
}
public void open(ExecutionContext arg0) throws ItemStreamException {
this.delegate.open(arg0);
}
public void update(ExecutionContext arg0) throws ItemStreamException {
this.delegate.update(arg0);
}
}
感谢阅读!
答案 0 :(得分:12)
创建一个自定义类,它扩展FlatFileItemWriter并仅实现构造函数:
public class MyFlatFileWriter extends FlatFileItemWriter {
public MyFlatFileWriter (){
super.setHeaderCallback(new FlatFileHeaderCallback() {
public void writeHeader(Writer writer) throws IOException {
writer.write("Col1Name,Col2Name,Col3Name");
}
});
}
然后在bean配置类属性
中使用此类答案 1 :(得分:5)
您是否尝试使用
public void writeHeader(Writer writer) throws IOException {
//... e.g. writer.write("my first line");
}
答案 2 :(得分:1)
FlatFileItemWriter为您提供了添加标题回调的选项
在将第一个项目写入文件之前将调用headerCallback。
因此,您需要通过实施FlatFileHeaderCallback
来实施标题回调