2016-08-02 20 views
1

我正在學習春天批次,我有讀者,映射器和作家的基本思想。現在我的要求是從文件中讀取每行,壓縮數據並在基於內存的網格中寫入數據。如何閱讀完整的行沒有任何映射器與彈簧批

我知道線映射器是iteam reader的強制屬性。我沒有創建映射器的用法,我所需要做的就是讀取該行並將其發送給寫入器以寫入網格。那麼,我怎樣才能跳過這一行映射器,或者我怎樣才能讀出這個普通行。目前我已經做了這樣的事情,這似乎不是理想的解決方案。

public class ShrFileMapper implements FieldSetMapper<SpaceDocument> { 
    @Override 
    public SpaceDocument mapFieldSet(FieldSet fieldSet) throws BindException { 
     String positionId = fieldSet.readString(0); 
     StringBuffer line = new StringBuffer(); 
     for (String fieldValue : fieldSet.getValues()) { 
      line.append("\t").append(fieldSet); 
     } 

     // logic for compression 

     SpaceDocument spaceDocument = new SpaceDocument("shr.doc"); 
     spaceDocument.setProperty("id", positionId); 
     spaceDocument.setProperty("payload", compressedString); 

     return spaceDocument; 
    } 
} 

回答

4

假設您使用FlatFileItemReader,您需要提供資源和LineMapper。由於您不希望將輸入行切換爲其他任何內容,因此您不需要LineTokenizer,只需傳遞原始輸入即可。欲瞭解更多信息,您可以簽出官方文檔:

http://docs.spring.io/spring-batch/reference/html/readersAndWriters.html#flatFileItemReader

春天已經提供了這樣的功能。 請檢出PassThroughLineMapper https://github.com/spring-projects/spring-batch/blob/master/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/file/mapping/PassThroughLineMapper.java

public class PassThroughLineMapper implements LineMapper<String>{ 

    @Override 
    public String mapLine(String line, int lineNumber) throws Exception { 
     return line; 
    } 

} 

該類不正是你所需要的!