如何解决Spring Batch DelimitedLineTokenizer-用双引号解析字符串
我有带双引号的记录,它给出了FlatFileParseException。记录就是这样的ABC|XYZ|0|1|INVALID "STRING WITH DOUBLE QUOTES USED|E
。
@Bean
public LineMapper < Product > lineMapper() {
DefaultLineMapper < Product > lineMapper = new DefaultLineMapper < > ();
DelimitedLineTokenizer lineTokeniser = new DelimitedLineTokenizer("|");
lineTokeniser.setNames("Type","Owner","Name","Id","Discreption","Category");
lineTokeniser.setIncludedFields(0,1,2,3,4,5);
BeanWrapperFieldSetMapper < Product > fieldSetMapper = new BeanWrapperFieldSetMapper < > ();
fieldSetMapper.setTargetType(Product.class);
lineMapper.setLineTokenizer(lineTokeniser);
lineMapper.setFieldSetMapper(fieldSetMapper);
return lineMapper;
}
@Bean
public FlatFileItemReader < Product > reader() {
FlatFileItemReader < Product > itemReader = new FlatFileItemReader < > ();
itemReader.setLineMapper(lineMapper());
itemReader.setResource(new FileSystemResource("c:/files/Product.txt"));
return itemReader;
}
我正在使用DelimitedLineTokenizer并按“ |”分割。
DelimitedLineTokenizer lineTokeniser = new DelimitedLineTokenizer("|");
有关如何处理此问题的任何建议。
解决方法
您需要扩展DelimitedLineTokenizer并从isQuoteCharacter返回false来解决此问题。
查看此工作代码:
import org.springframework.batch.item.file.transform.DelimitedLineTokenizer;
import org.springframework.batch.item.file.transform.FieldSet;
public class PlainTests {
public static void main(String[] args) {
DelimitedLineTokenizer t = new MyDelimitedLineTokenizer("|");
t.setNames("Type","Owner","Name","Id","Description","Category");
FieldSet fs = t.tokenize("ABC|XYZ|0|1|INVALID \"STRING WITH DOUBLE QUOTES USED|E");
System.out.println(String.join("\n",fs.getValues()));
//strip the double quote from Description if needed
}
}
class MyDelimitedLineTokenizer extends DelimitedLineTokenizer {
public MyDelimitedLineTokenizer(String d) {
super(d);
}
@Override
protected boolean isQuoteCharacter(char c) {
return false;
}
}
另请参阅: Spring Batch - FlatFileParseException (record with double quotes)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。