【问题标题】:Spring Batch DelimitedLineTokenizer - parse String with Double QuotesSpring Batch DelimitedLineTokenizer - 用双引号解析字符串
【发布时间】:2020-10-22 14:09:07
【问题描述】:

我有带有双引号的记录,它给出了 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("|");

有关如何处理此问题的任何建议。

【问题讨论】:

标签: spring spring-boot spring-batch


【解决方案1】:

您需要扩展 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)

【讨论】:

    猜你喜欢
    • 2021-10-24
    • 1970-01-01
    • 2020-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-15
    • 2013-08-02
    • 1970-01-01
    相关资源
    最近更新 更多