如何在使用 Spring Batch FlatFileItemWriter 写入 csv 文件时跳过空行
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 returns 空字符串,它仍然写入文件。
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 文件时如果该行为空则跳过。
您需要在步骤中添加 ItemProcessor<YourObject>
。在其中,您可以添加一个简单的 YourObject process(YourObject item)
方法来检查对象是否会导致空行。如果不是,return 对象。如果是这样,return null
。
这将防止您希望丢弃的物品到达作者手中,并会在您查看该步骤的 BATCH_STEP_EXECUTION
table 时增加 FILTER_COUNT
。
有关 filtering objects 的更多信息,请参阅 Spring 批处理文档。
编辑:您的回答中的教程 you referenced 也包括过滤处理器 (FilterReportProcessor
) 的示例。
我正在尝试使用 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 returns 空字符串,它仍然写入文件。
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 文件时如果该行为空则跳过。
您需要在步骤中添加 ItemProcessor<YourObject>
。在其中,您可以添加一个简单的 YourObject process(YourObject item)
方法来检查对象是否会导致空行。如果不是,return 对象。如果是这样,return null
。
这将防止您希望丢弃的物品到达作者手中,并会在您查看该步骤的 BATCH_STEP_EXECUTION
table 时增加 FILTER_COUNT
。
有关 filtering objects 的更多信息,请参阅 Spring 批处理文档。
编辑:您的回答中的教程 you referenced 也包括过滤处理器 (FilterReportProcessor
) 的示例。