如何将EOT设置为Spring批处理文件的行分隔符

问题描述

我需要处理一个以EOT字符作为记录结尾但没有换行符的文件。我正在使用Spring批处理进行批量处理。我无法将十六进制值“ \ u0004”设置为要处理的行字符的结尾的EOT

AP01000110319.99RD34 / 78 OPTIMA BAT 0110000000100 **** AU0081140500003001000110

这些字符不可见。基本上是EOT(传输结束符)。

我的代码看起来像这样

public FlatFileItemReader<ProductDTO> productReader() throws Exception 

{
    FlatFileItemReader<ProductDTO> reader = new FlatFileItemReader<>();

    reader.setResource(inputFileResource(null));
    reader.setLineMapper(new DefaultLineMapper<ProductDTO>() {{
                    setLinetokenizer(new DelimitedLinetokenizer() {{
            setNames("field1","field2","field3","field4","field5","field6","field7","field8","field9","field10","field11" );
            setDelimiter("\u001c");
        }});
        setFieldSetMapper(new ProductFileRowMapper());
    }});
    reader.setRecordSeparatorPolicy(new DefaultRecordSeparatorPolicy("\u0004")
    {});
    return reader;

我尝试设置DefaultRecordSeparatorPolicy,但是它不起作用。基本上,我正在研究如何将除换行符以外的任何字符设置为行分隔符。我的输入文件一个单行大文件,每个记录都由EOT分隔。感谢您的任何帮助。

解决方法

我尝试设置DefaultRecordSeparatorPolicy,但是它不起作用。

您正在创建一个新的DefaultRecordSeparatorPolicy("\u0004"),但是此处的参数是quoteCharacter,而不是定界符。您需要使用后缀设置为SuffixRecordSeparatorPolicy的{​​{1}}。