微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Springboot / Spring Batch加载没有分隔符的文件

如何解决Springboot / Spring Batch加载没有分隔符的文件

使用Springboot / Spring Batch,我尝试加载不带分隔符的文件

文件示例:

field1field2field3
field1field2field3
field1field2field3

这是我的代码

@Bean
    public FlatFileItemReader<Person> reader() {

          
          return new FlatFileItemReaderBuilder<Person>() 
                  .name("personItemReader")
                  .resource(new ClassPathResource("people.txt"))
                  .linetokenizer(new FixedLengthTokenizer()  {{ setNames("firstName","lastName"); setColumns(new Range(1-6,7-12)); }})
                  .fieldSetMapper(new BeanWrapperFieldSetMapper<Person>() {{ settargettype(Person.class); }})
                  .build()
                  ; 
    }

但是它不起作用。我有以下错误,但我不明白为什么:

Bean instantiation via factory method Failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.batch.item.file.FlatFileItemReader]: Factory method 'reader' threw exception; nested exception is java.lang.IllegalArgumentException: Min value must be higher than zero

你能解释一下我吗?

解决方法

您在此处声明行标记化程序不正确:

.lineTokenizer(new FixedLengthTokenizer() {{
      setNames("firstName","lastName");
      setColumns(new Range(1-6,7-12));
 }})

这就像您指定了[-5,-5]的范围。 setColumns包含Range s个变量,其中每个范围都应使用Range(min,max)创建。所以在你的情况下应该是这样的:

.lineTokenizer(new FixedLengthTokenizer()  {{
       setNames("firstName","lastName");
       setColumns(new Range(1,6),new Range(7,12));
}})

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。