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