簡體   English   中英

春季批處理中如何使用FlatFileItemReader處理以空格分隔的項目(單行中有多個記錄)?

[英]How to use FlatFileItemReader in spring batch for items separated by space (multiple records on single line)?

春季批處理FlatFileItemReader默認支持兩種文件格式,固定長度和分隔符分隔。 例如

id name email 
1  name1  name1@abc.com
2  name2  name@abc.com

因此,它將每行視為一個項目,將字段視為項目(域)對象的屬性。

我的輸入文件只有用空格或逗號分隔的ID,因為我只需要ID(或者對於用戶名或電子郵件等每個項目,它可以是唯一的)

1,2,3,4,5,6
7,8,9, ...... so on

要么

username1, username2, username3, username4 .. so on

如何使用FlatFileItemReader將每個id視為每個項目,即在短的一行中有多個記錄? 還是有其他方法可以做到這一點?

您可以根據需要使用自定義LineMapper實施邏輯,以將項目與每一行分開。

這是示例代碼,這些代碼將返回ID列表,這些ID要么用逗號或空格分隔,要么在每行中都以逗號分隔。

import java.util.ArrayList;
import java.util.List;

import org.springframework.batch.item.file.LineMapper;

public class CustomLineMapper implements LineMapper<List<String>> {

    public List<String> mapLine(String line, int lineNumber) throws Exception {

        List<String> list = new ArrayList<String>();
        for (String s1 : line.split(",")) {
            for (String s2 : s1.trim().split(" ")) {
                list.add(s2.trim());
            }
        }
        return list;
    }

}

覆蓋默認的緩沖讀取器也可以解決此問題。 因此,在自定義閱讀器中,如果尚未完成同一行中的所有對象的讀取,則無需繼續執行下一行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM