首页 文章

使用Spring Batch FlatFileItemWriter写入csv文件时如何跳过空行

提问于
浏览
0

我正在尝试使用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返回空String,它仍然会写入文件 .

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文件时该行为空 .

1 回答

  • 0

    您需要在步骤中添加 ItemProcessor<YourObject> . 在其中,您可以添加一个简单的 YourObject process(YourObject item) 方法来检查对象是否会产生空行 . 如果没有,请返回该对象 . 如果是这样,请返回 null .

    这样可以防止您要丢弃的项目进入编写器,并在查看该步骤的 BATCH_STEP_EXECUTION 表时增加 FILTER_COUNT .

    有关filtering objects的更多信息,请参见Spring Batch文档 .

    Edit: 您的答案中的教程you referenced也包含过滤处理器( FilterReportProcessor )的示例 .

相关问题