代码之家  ›  专栏  ›  技术社区  ›  Shankar

FlatFileParseException Spring批处理

  •  3
  • Shankar  · 技术社区  · 11 年前

    当我在作业配置中使用FlatFileItemReader时,我遇到了平面文件解析异常。

    实际上,它工作得很好,但最近的文件中出现了抛出错误。

    org.springframework.batch.item.file.FlatFileParseException: Parsing error at line: 1 in resource=[URL [file:/prod/users/cdi/crh537/Java_All/input/xaaaaa]], input=[16910203315393417SEVAN Q DANG18711 PARK GROVE LNDALLASTX7528751224609645044438000VANVETTE98@YAHOO.COM586404562MAR CL197311192013042504Closed (zero balance DDA)220PUSA]
    

    主要区别是当前文件记录包含一些特殊字符,如@和()。

    下面一行抛出错误。使用的分隔符是^A(linux)

    16^A123^A2323232^ADD^SWAN D REE^A123 MMM STRRET^A^ADALLAS^ATX^A2222^A^A^A^A^A^A^A^A^A^A434343434^A23232^A^AABC@ABC.COM^A586404562^A^A^AMAR^A ^ACL^A121212^A20130425^A04^AClose^A^A220^A^A^AP^AUSA^A
    

    以下是读卡器配置。

    <bean id="masterFileItemReader" class="org.springframework.batch.item.file.FlatFileItemReader" scope="step">
    
            <property name="resource" value="#{stepExecutionContext['fileResource']}" />
    
            <property name="lineMapper">
                <bean class="org.springframework.batch.item.file.mapping.DefaultLineMapper">
                    <property name="lineTokenizer">
                        <bean
                            class="org.springframework.batch.item.file.transform.DelimitedLineTokenizer">
                            <property name="delimiter" value="${file.delimiter}"/>
                            <property name="names" value="filed1,field2,...field39" />
                        </bean>
                    </property>
                    <property name="fieldSetMapper">
                        <bean class="com.batch.SrcMasterFieldSetMapper" />
                    </property>
                </bean>
            </property>
    
        </bean>
    
    1 回复  |  直到 10 年前
        1
  •  2
  •   Community Mohan Dere    9 年前

    我猜你的文件中有隐藏字符。你可以关注 this link 验证文件中是否包含以及包含哪些字符的说明。

    这个问题可以帮助你 \001 delimiter issues 关于选择正确的分隔符值。按照建议,你可以尝试通过 "\u0001" 相反 ^A .

    更新:

    实际错误是在打印整个堆栈跟踪时 org.springframework.batch.item.file.transform.IncorrectTokenCountException:记录中发现的令牌数量不正确:应为39,实际为40

    这是因为记录/行中的最后一个字段后跟分隔符和$,而不仅仅是$,所以有一个额外的标记。

    推荐文章