【发布时间】:2015-06-13 01:58:05
【问题描述】:
我正在尝试使用 FlatFileItemReader 解析 CSV 文件。此 CSV 包含一些引用的换行符,如下所示。
email, name
abc@z.com, "NEW NAME
ABC"
但此解析失败,必填字段为 2,但实际为 1。
我的 FlatFileReader 配置中缺少什么?
<property name="lineMapper">
<bean class="org.springframework.batch.item.file.mapping.DefaultLineMapper">
<!-- The lineTokenizer divides individual lines up into units of work -->
<property name="lineTokenizer">
<bean
class="org.springframework.batch.item.file.transform.DelimitedLineTokenizer">
<!-- Names of the CSV columns -->
<property name="names"
value="email,name" />
</bean>
</property>
<!-- The fieldSetMapper maps a line in the file to a Product object -->
<property name="fieldSetMapper">
<bean
class="com.abc.testme.batchjobs.util.CustomerFieldSetMapper" />
</property>
</bean>
</property>
【问题讨论】:
-
[email, name..., "quoted..."] 会导致 3 个值,如果我使用 [email, "name,something"] 它会按预期工作,因为引号字符只是说“忽略引号内的 linie 分隔符”,你期望什么?
-
@MichaelPralow 我想解析上面显示的 CSV 文件。
-
删除未使用的配置
-
调试后我知道的是,我的 BufferedReader 读取直到遇到换行符。之后它停止阅读。虽然我在这里发布的数据仍然是新的。有没有办法用 spring-batch FlatFileItemReader 解析这样的 CSV 文件?
-
我没有发现您的配置有任何明显错误,我们对这种情况进行了单元测试 (github.com/spring-projects/spring-batch/blob/master/…),所以我知道它有效。您只在此处显示
LineMapper的配置...您是否使用任何类型的自定义RecordSeparatorPolicy?
标签: java spring csv spring-batch