如何使用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
相关产品推荐
相关产品推荐

