Java FixedLength在尝试仅获取值的子集时出现问题

Java FixedLength在尝试仅获取值的子集时出现问题,java,spring,spring-batch,batch-processing,Java,Spring,Spring Batch,Batch Processing,我确实有一个文件,在一行中有许多记录或列。此文件正在多个系统中使用。因此,并非所有字段都是我的需求所必需的。因此,如果我只设置值的子集,如下所示 <property name="lineTokenizer"> <bean class="org.springframework.batch.item.file.transform.FixedLengthTokenizer"> <property name="names" value="aa,cc,

我确实有一个文件,在一行中有许多记录或列。此文件正在多个系统中使用。因此,并非所有字段都是我的需求所必需的。因此,如果我只设置值的子集,如下所示

<property name="lineTokenizer">
    <bean class="org.springframework.batch.item.file.transform.FixedLengthTokenizer">
        <property name="names" value="aa,cc,vv,bb" />
        <property name="columns" value="1-578,579-579,580-580,581-581" />
    </bean>
</property>

我们是否需要做一些特殊的工作来只获取值的子集?例外情况是,该行比您提供的范围短。如中所示,映射的列太多,而不是太少


也就是说,您需要在
FixedLengthTokenizer
中映射整个记录。但是,您使用的
FieldSetMapper
不需要使用所有这些字段。

当最后一个字段实际上不是固定长度,而是比预期短时,我遇到了这个异常。所有其他字段都是预期长度,但最终字段需要允许更少的字符

我能够调整最终参数,使其不包括以下最终值:

<property name="lineTokenizer">
    <bean class="org.springframework.batch.item.file.transform.FixedLengthTokenizer">
        <property name="names" value="aa,cc,vv,bb" />
        <property name="columns" value="1-578,579-579,580-580,581" />
    </bean>
</property>

根据Spring文档:

如果最后一个范围是打开的,则该行的其余部分将被读入该列(与严格的标志设置无关)

在OP的情况下,最后一个字段只有1个字符,因此此解决方案的意义不大,但是,如果范围较大,则即使名称值与提供的列值匹配,也可能导致相同的错误消息

资料来源:

<property name="lineTokenizer">
    <bean class="org.springframework.batch.item.file.transform.FixedLengthTokenizer">
        <property name="names" value="aa,cc,vv,bb" />
        <property name="columns" value="1-578,579-579,580-580,581" />
    </bean>
</property>