如何使用Spring Batch将标头和尾标写入现有文件,而又不覆盖该文件中的信息?

时间:2018-10-04 00:23:47

标签: java spring spring-batch

我在目录中有多个文件,这些文件中的内容会有所不同。

Ex文件1:

第1行。数据数据数据

Ex文件2:

第1行。数据数据数据

第2行。数据数据数据

第3行数据数据数据

我需要在文件顶部附加一个标头,在底部附加一个尾部,而不能使用Spring Batch覆盖文件中的数据。

Ex文件1:

HEADERFOOTERZZZZZZZZ0000000XXXXXXXX

第1行。数据数据数据

HEADERFOOTERZZZZZZZZ0000000XXXXXXXX

Ex文件2:

HEADERFOOTERZZZZZZZZ0000000XXXXXXXX

第1行。数据数据数据

第2行。数据数据数据

第3行数据数据数据

HEADERFOOTERZZZZZZZZ0000000XXXXXXXX

我的上下文文件的writer部分具有以下常规配置,但是没有标题或尾部添加到现有测试文件中。如何配置我的flatFileItemWriter在不覆盖文件现有数据的情况下向其现有文件添加标头和结尾?

<bean id="addHeaderTrailerWriter" class="org.springframework.batch.item.file.FlatFileItemWriter" scope="step">
        <property name="lineAggregator" ref="lineAggregator" />
        <property name="resource" value="file://#{stepExecutionContext['WORK.FILE.NAME']}" />
        <property name="headerCallback" ref="headerFooterCallback" />
        <property name="footerCallback" ref="headerFooterCallback" />
    </bean>
    <bean id="lineAggregator" class="org.springframework.batch.item.file.transform.PassThroughLineAggregator"/>
    <bean id="headerFooterCallback" class="headerFooterCallbackClass">
        <constructor-arg name="headerFooter" ref="customHeaderFooter" />
    </bean>
    <bean id="customHeaderFooter" class="customHeaderFooterImplClass" > 
        <property name="input1" value="HEADERFOOTER" />
        <property name="input2" value="ZZZZZZZZ" />
        <property name="inout3" value="00000000" />
        <property name="input4" value="XXXXXXXX" />
    </bean>

1 个答案:

答案 0 :(得分:1)

无法覆盖文件本身以添加页眉和页脚。 append中有一种FlatFileItemWriter模式,但是不会在文件“内联”中的当前数据之前插入标头。

您可以做的是分两个步骤创建工作:

  • step1(面向块):从文件读取并写入另一个文件,添加页眉和页脚
  • step2(任务小程序):删除原始文件并重命名副本。

希望这会有所帮助。