2012-06-21 51 views
1

我有一個項目作家如下:春天批量寫入固定格式文件

<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> 

正如清楚,我寫4列與列固定格式文件長度分別爲8,12,11和16。

但是,假設第1列的字符串是14個字符而不是8個字符,那麼輸出文件通過向前推動整行來盲目地容納所有14個字符。

THIS IS A TEST 

Expecting: 
THIS IS COL2STARTS 

Getting: 
THIS IS A TESTCOL2STARTS 

如何避免這種情況?

不應該剩下的字符被截斷,只有前8個字符被寫入?

我是否需要在我的代碼中進行驗證,以嚴格按照列的預期僅傳遞8個字符?

回答

1

您必須隨寬度一起設置精度。試試這個格式化字符串:

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

見:FormatterLineAggregatorFormatter