我想解析这样的一行:
" A"," aa,bb" ,," aa"
进入这些代币:
A | aa,bb | (空字符串)| AA
FileItemReader定义如何?我想我需要自己的DelimitedLineTokenizer?
由于
答案 0 :(得分:1)
请查看此示例http://www.mkyong.com/spring-batch/spring-batch-hello-world-example/
如果逗号将成为分隔符,则无需创建自己的DelimitedLineTokenizer。 您可以使用" org.springframework.batch.item.file.transform.DelimitedLineTokenizer"
答案 1 :(得分:1)
DelimitedLineTokenizer应该可以解析逗号或管道。如果您正在考虑读取以逗号分隔并转换为管道分隔的文件,则需要丰富您的项目(在处理器中),然后保留它。
答案 2 :(得分:0)
即使在相同的情况下,一个包含逗号的文本也会滑到新的单元格上。我更改了XML并添加了CustomDelimitedLineAggregator。
例如:)我的XML将包含以下代码:-
<property name="lineAggregator">
<bean
class="com.CustomDelimitedLineAggregator">
<property name="delimiter" value="|" />
<property name="fieldExtractor">
<bean
class="org.springframework.batch.item.file.transform.BeanWrapperFieldExtractor">
<property name="names"
value="entityHashKey,entityLocationClli,entityLocationName,entityLocationType,entitySCISCode,entityStateCode,entityCountryCode,entityRegion" />
</bean>
</property>
</bean>
</property>
</bean>
还创建了如下的自定义类(即CustomDelimitedLineAggregator.java):-
package com;
导入org.springframework.batch.item.file.transform.ExtractorLineAggregator; 导入org.springframework.util.StringUtils;
公共类CustomDelimitedLineAggregator扩展了ExtractorLineAggregator { 私有字符串定界符;
public CustomDelimitedLineAggregator() {
this.delimiter = ",";
}
public void setDelimiter(String delimiter) {
this.delimiter = delimiter;
}
@Override
public String doAggregate(Object[] fields) {
String arrregateVal = StringUtils.arrayToDelimitedString(fields, this.delimiter);
if(null != arrregateVal && arrregateVal.contains(","))
{
arrregateVal = "\""+arrregateVal+"\"";
}
return arrregateVal;
}
}
在doAggregate
方法中,每一行的完整数据都将到来,如果任何行包含逗号,它将把整行放在里面(即双引号)“我的包含逗号的完整行数据”因此即使其中包含逗号,整行也将放在一行中。