10

以下の形式のフラットファイルを作成したい:

Col1Name;Col2Name;Col3Name
one;23;20120912
two;28;20120712

ご覧のとおり、フラット ファイルの最初の行は列名です。

ヘッダー コールバックを介してこれを達成する方法は?

入力ファイルが上記の形式の場合、最初の行を無視する以下のオプションがあることがわかります。

<property name="firstLineIsHeader" value="true"/>

また、このJira 課題は、私が必要としているものが実装され、クローズされていることを示しています。ただし、最初の行を列名として記述する例は見つかりません。

<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);        
}

}

読んでくれてありがとう!

4

3 に答える 3

6

一緒に仕事をしようとしましたか

  public void writeHeader(Writer writer) throws IOException {
      //... e.g. writer.write("my first line");

  } 
于 2012-09-12T22:12:10.533 に答える