2

以下のようなアイテムライターがあります。

<beans:property name="lineAggregator">
<beans:bean class="org.springframework.batch.item.file.transform.FormatterLineAggregator">
        <beans:property name="fieldExtractor">
                <beans:bean class="org.springframework.batch.item.file.transform.BeanWrapperFieldExtractor">
                 <beans:property name="names" value="column1, column2, column3, column4 " /> 
                </beans:bean>
            </beans:property>

            <beans:property name="format" value="%-8s%-12s%-11s%-16s" /> 
        </beans:bean>
    </beans:property>

明らかなように、列の長さがそれぞれ8、12、11、および16の固定形式ファイルに4つの列を書き込んでいます。

ただし、列 1 の文字列が 8 文字ではなく 14 文字であるとすると、出力ファイルは、行全体を先に進めることによって、盲目的に 14 文字すべてに対応します。

THIS IS A TEST

Expecting: 
THIS IS COL2STARTS

Getting: 
THIS IS A TESTCOL2STARTS

これを回避するには?

残りの文字は切り捨てられ、最初の 8 文字だけが書き込まれるべきではありませんか?

column で期待される 8 文字のみを厳密に渡すために、コードに検証を入れる必要がありますか?

4

1 に答える 1

2

幅とともに精度を設定する必要があります。このフォーマッタ文字列を試してください:

<beans:property name="format" value="%-8.8s%-12.12s%-11.11s%-16.16s" /> 

参照: FormatterLineAggregatorフォーマッタ

于 2012-06-21T14:25:00.923 に答える