2014-01-24 17 views
1

我想使用Spring Batch來讀取文件列表並將它們作爲文件中每一行的項目進行處理。在文件末尾,我想要對文件中的行進行計數。哪個API可以讀取文件列表以便描述它們?

在Spring Batch中使用哪個API來知道某個項目在下一個開始之前代表文件的結尾?

回答

0

我想你正在使用基於記錄的文件。
使用MultiResourceItemReader(讀取多個文件)和FlatFileItemReader(解析文件)。
我們的目的是檢測當一個文件到達終點這樣一個PeekableItemReader我們先行下一個記錄,如果這是null我們遇到EOF

class EOFCheckItemReader<T> extends SingleItemPeekableItemReader<T> { 
    private int count; 
    T read() { 
    T item = super.read(); 
    if(null == item) { 
     // EOF detected 
     manageEOF(); 
     count = 0; 
    } 
    else { 
     count++; 
    } 
    return item; 
    } 

    private void manageEOF() {} 

    // Also implements update(), open(), close() 
    // to save count value into execution context 
    // No need to save delegate's state because we register it 
    // as stream into job's xml definition 
} 

春季批次heavly基於代表團因此,使用MultiResourceItemReaderSingleItemPeekableItemReader的財產「代表」,我們可以輕鬆解決問題。 這是一個簡單的骨架(只是一個想法,我不能測試它不好意思):

<bean name="csvReader" class="FlatFileItemReader"> 
    <!-- set all properties --> 
</bean> 
<bean name="eofCheckReader" class="EOFCheckItemReader"> 
    <property name="delegate" ref="multiResourceReader" /> 
</bean> 
<bean name="multiResourceReader"> 
    <property name="resources" value="file://*.csv" /> 
    <property name="delegate" ref="csvReader" /> 
</bean> 
<step> 
    <chunk reader="eofCheckReader" /> 
    <streams> 
    <stream ref="multiResourceReader" /> 
    </streams> 
</step> 
+0

你能在最終的文件記錄API擴展? – hawkeye

+0

檢查我的編輯... –

相關問題