[英]FlatFileItemWriter generating blank file on exception in Spring batch
[英]how to skip blank lines while writing to csv file with Spring Batch FlatFileItemWriter
我正在嘗試使用 Spring Batch FlatFifileItemWriter 將 java 數據對象寫入.csv 文件,正如下面位置示例中所述。 http://www.mkyong.com/spring-batch/spring-batch-example-xml-file-to-csv-file/
編寫器配置如下所示。
<bean id="cvsFileItemWriter" class="org.springframework.batch.item.file.FlatFileItemWriter">
<!-- write to this csv file -->
<property name="resource" value="file:cvs/report.csv" />
<property name="shouldDeleteIfExists" value="true" />
<property name="lineAggregator">
<bean
class="org.springframework.batch.item.file.transform.DelimitedLineAggregator">
<property name="delimiter" value="," />
<property name="fieldExtractor">
<bean
class="org.springframework.batch.item.file.transform.BeanWrapperFieldExtractor">
<property name="names" value="refId, name, age, csvDob, income" />
</bean>
</property>
</bean>
</property>
</bean>
由於 FlatFileItemWriter 在 API 中具有以下 write() 方法定義,因此即使 LineAggregator 返回空字符串,它仍然會寫入文件。
StringBuilder lines = new StringBuilder();
int lineCount = 0;
for (T item : items) {
lines.append(lineAggregator.aggregate(item) + lineSeparator);
lineCount++;
}
try {
state.write(lines.toString());
}
使用 spring 批處理寫入 java 中的 csv 文件時,是否有任何方法可以將其配置為跳過。
如果 memberclass 為空,這是另一種使用復合編寫器編寫器的方法。 如下創建另一個作家。
public class YourMemberFileItemWriter extends FlatFileItemWriter<YourMainClass>{
@Override
public String doWrite(List<? extends YourMainClass> items) {
StringBuilder lines = new StringBuilder();
for (YourMainClass item : items) {
if ( YourMainClass.getYourMemberClass() != null) {
lines.append(this.lineAggregator.aggregate(item)).append(this.lineSeparator);
}
}
return lines.toString();
}
}
定義您的復合編寫器。 CompositeItemWriter compositeItemWriter = new CompositeItemWriter<>(); CompositeItemWriter.setDelegates(Arrays.asList(mainClassCsv(),memberClassCsv());返回compositeItemWriter;
將成員 class 方法如下添加到復合寫入器:
public FlatFileItemWriter memberClassCsv() {
// TODO Auto-generated method stub
YourMemberFileItemWriter fileWriter = new YourMemberFileItemWriter();
fileWriter.setName("yourMemberClass");
fileWriter.setResource(new FileSystemResource("memberfile.csv"));
fileWriter.setLineAggregator(getMemberClassDelimitedLineAggregator());
return fileWriter;
}
public DelimitedLineAggregator<YourMainClass> getMemberClassDelimitedLineAggregator() {
BeanWrapperFieldExtractor<YourMainClass> beanWrapperFieldExtractor = new BeanWrapperFieldExtractor<YourMainClass>();
beanWrapperFieldExtractor.setNames(new String[] {
"memberClassField.fieldname1"
,"memberClassField.fieldname2"
});
DelimitedLineAggregator<YourMainClass> delimitedLineAggregator = new DelimitedLineAggregator<YourMainClass>();
delimitedLineAggregator.setDelimiter(",");
delimitedLineAggregator.setFieldExtractor(beanWrapperFieldExtractor);
return delimitedLineAggregator;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.