FlatFileParseException Spring 批处理
FlatFileParseException Spring batch
我在作业配置中使用 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
以下是reader配置。
<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>
我猜你的文件中有隐藏字符。您可以按照 this link 说明来验证文件中是否包含字符以及包含哪些字符。
这个问题可以帮助您选择正确的分隔符值。根据建议,您可以尝试传递 "\u0001"
而不是 ^A
.
更新:
打印整个堆栈跟踪时出现实际错误org.springframework.batch.item.file.transform.IncorrectTokenCountException:记录中发现的标记数量不正确:预期为 39,实际为 40
因为record/line的最后一个字段后跟定界符和$而不仅仅是$,所以多了一个token。
我在作业配置中使用 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
以下是reader配置。
<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>
我猜你的文件中有隐藏字符。您可以按照 this link 说明来验证文件中是否包含字符以及包含哪些字符。
这个问题可以帮助您"\u0001"
而不是 ^A
.
更新:
打印整个堆栈跟踪时出现实际错误org.springframework.batch.item.file.transform.IncorrectTokenCountException:记录中发现的标记数量不正确:预期为 39,实际为 40
因为record/line的最后一个字段后跟定界符和$而不仅仅是$,所以多了一个token。