我是Spring Batch的新手,我遇到了一个问题。
我正在开发的批处理应用程序读取和处理分隔文本文件中的行。我已经将应用程序配置为使用FlatFileReader来读取分隔文本文件,但问题是所读取的某些数据中包含双引号。当FlatFileReader遇到单双引号时抛出FlatFileParseException,但当存在两个双引号时不抛出任何双引号。
有没有人遇到过这个问题,如果有,正确的解决方案是什么?不幸的是,操纵数据本身不是一种选择。我尝试在每个双引号之前添加一个转义字符,但是仍然会抛出一个异常。
任何帮助都将不胜感激。
发布于 2011-10-12 16:42:46
如果这些文件没有真正的引号(2x引号字符),您可以使用spring论坛changing the quote character for the DelimitedLineTokenizer中的解决方案
<property name="lineTokenizer">
<bean class="org.springframework.batch.item.file.transform.DelimitedLineTokenizer">
<property name="quoteCharacter" value="@" />
</bean>
</property>发布于 2014-03-27 22:23:30
我遇到了同样的问题。然而,所提出的解决方案并不是最优的。如果您的数据中没有合适的引号字符怎么办?不幸的是,我们并不总是能够控制输入数据,并且预处理它们通常不是一个好主意。在探索DelimitedLineTokenizer源代码时,我决定采用这个解决方案,并将其与下面的答案分享。它需要重写一个类,但是这样我们就完全消除了引号字符的问题。
import org.springframework.batch.item.file.transform.DelimitedLineTokenizer;
public class CustomDelimitedLineTokenizer extends DelimitedLineTokenizer {
@Override
protected boolean isQuoteCharacter(char c) {
return false;
}
} 这样,DelimitedLineTokenizer就无法识别引号字符。当然,如果我们需要这个功能,那么这个解决方案是不可采用的,但是我认为它比建议的只对问题进行排序而不是解决问题的解决方案更好。希望它能帮助到一些人。
https://stackoverflow.com/questions/7734632
复制相似问题