擁有一個具有固定長度記錄和固定頁腳的簡單文本檔案,我想驗證頁腳實際上作為最后一行存在(以該特定格式)并且還保持塊處理,因為檔案非常大。如果頁腳行不存在,則意味著檔案不完整,作業應該失敗。
我無法找到一種方法來做到這一點,任何幫助將不勝感激。
Java 配置
@Configuration
public class JobConfig {
@Bean
public Step exampleLoad(
StepBuilderFactory stepBuilderFactory) {
return stepBuilderFactory.get("exampleLoad")
.<ExampleRecord, ExampleEntity>chunk(5000)
.reader(ads10Reader())
.processor(exampleProcessor())
.writer(exampleWriter())
.build();
}
@Bean
@StepScope
public FlatFileItemReader<ExampleRecord> exampleReader() {
return new FlatFileItemReaderBuilder<ExampleRecord>()
.name("exampleReader")
.resource(...)
.fixedLength()
.strict(false)
.columns(new Range(1, 2), new Range(3, 4), new Range(5, 6))
.names("a", "b", "c")
.targetType(ExampleRecord.class)
.build();
}
// processor/writers omitted for brevity
}
簡單文本檔案示例:
AABBCC
DDEEFF
XXYYZZ
Total number of records: 3
uj5u.com熱心網友回復:
您無法一步完成,因為頁腳位于檔案末尾。我會在前面的步驟中使用一個簡單的小任務來進行驗證,該小任務計算行數并檢查計數是否與最后一行匹配(如果該行完全存在)。代碼顯然應該嘗試在不將整個檔案加載到記憶體中的情況下獲取該資訊。
為了有效地獲得行數,java.nio.file.Files.lines(yourPath).count()
應該可以。要獲取最后一行,請選中快速讀取文本檔案的最后一行?. 有了它,您應該能夠實作檔案驗證 tasklet。您可以使用條件流或決策程式來決定下一個(預先驗證的面向塊的)步驟是否應該運行。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/496914.html