You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用FixedLengthTokenizer实现flat文件每行UUID的准确读取

你可以通过以下方式使用FixedLengthTokenizer实现需求:

标准带连字符的UUID总长度固定为36位,FixedLengthTokenizer按固定位置拆分字段的特性,完全不需要依赖分隔符,也不会误处理UUID内部的连字符。你可以直接修改FlatFileItemReader的配置,将原来的分隔符配置替换为固定长度拆分规则即可。

修改后的代码示例如下:

@Bean
@StepScope
@Qualifier("employeeItemReader")
@DependsOn("partitioner")
public FlatFileItemReader<Employee> EmployeeItemReader(@Value("#{stepExecutionContext['fileName']}") String filename)
        throws MalformedURLException {
    return new FlatFileItemReaderBuilder<Employee>().name("employeeItemReader")
            // 替换原delimited配置,使用固定长度分词器
            .fixedLength()
            // 配置列范围:如果要严格匹配UUID长度,写new Range(1,36);如果要直接读完整行所有内容,直接写new Range(1)即可
            .columns(new Range(1))
            .names(new String[] { "id" })
            .fieldSetMapper(new BeanWrapperFieldSetMapper<Employee>() {
                {
                    setTargetType(Employee.class);
                }
            })
            .linesToSkip(0)
            .resource(new UrlResource(filename)).build();
}

配置说明

  • 如果你需要严格校验UUID长度,可将columns配置为new Range(1,36),只会截取每行前36位作为id字段值,超出部分会被丢弃;如果需要完整读取整行内容作为id,直接使用new Range(1)即可,分词器会自动读取从第一位到行尾的所有内容。
  • UUID内的连字符不需要额外处理:整个字段会作为完整字符串直接映射到Employee的id属性,连字符会被正常保留,不需要额外转义或过滤。
  • 该方案不需要依赖自定义分隔符,完全避免了分隔符冲突、行内多UUID意外拆分的问题。

内容的提问来源于stack exchange,提问作者Ajay Kumar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 10:15:08