我有一个如下的项目阅读器:
<beans:bean id="myItemReader" class="org.springframework.batch.item.file.FlatFileItemReader">
<beans:property name="resource" ref="myFileResource" />
<beans:property name="lineMapper">
<beans:bean class="org.springframework.batch.item.file.mapping.DefaultLineMapper">
<beans:property name="lineTokenizer">
<beans:bean class="org.springframework.batch.item.file.transform.DelimitedLineTokenizer">
<beans:property name="delimiter" value="|"/>
<beans:property name="quoteCharacter" value="~"/>
<beans:property name="names" value="${my_column_names}" />
</beans:bean>
</beans:property>
<beans:property name="fieldSetMapper">
<beans:bean class="${my_mapper_class_name}" />
</beans:property>
</beans:bean>
</beans:property>
如上所述,我将引号字符从默认的 "(双引号)更改为 ~(倾斜符号)
现在,关于引号字符的 DelimitedLineTokenizer 的 Java 文档说:
quoteCharacter 的公共设置器。引号字符可用于跨行结尾扩展字段或包含包含分隔符的字符串。在带引号的标记内,引号字符可用于转义自身,因此 "a""b""c" 被标记为 a"b"c。
因此,如果我的数据本身包含分隔符(在我的例子中是管道符号),那么我应该用引号字符将它括起来 - 我这样做了。例如下面的行,其中第三列包含分隔符:
oneColumn|twoColumn|three~|~Column|fourColumn
但是,我的 Java 对象中第三列的值是“three~|~Column”,而不是应该的“three|Column”。
在生成的 java 对象项的属性内设置值时,是否应该自动处理和忽略用于转义数据中分隔符的引号字符?
在编写器(PreparedStatementSetter 或 LineAggregator)中再次用空字符串替换引号字符是唯一的解决方案吗?
谢谢阅读!