使用apache中的camel-beanio时,如何跳过CSV头行?
我的映射XML文件如下所示:
<beanio>
<record name="myRecord" class="my.package.MyConditionClass">
<field name="myField" position="1" />
<field name="mylist" position="2" collection="list" type ="string"/>
<segment name="conditions" class="my.package.MyConditionClass" nillable="true" collection="map" key="myKey">
<field name="myKey" position="2">
<field name="myValue" position="3">
</segment>
</record>
</beanio>
但是为了让我的代码运行,我必须手动删除第一行(标题行)。如何自动跳过标题行?
要读取CSV文件并忽略第一个标题行,可以将标题的第一个字段值定义为CSV Stream
的comments
CSV示例:
toto;tata;titi
product1;1;18
product2;2;36
product3;5;102
映射文件:
<beanio ...
<stream name="dataStream" format="csv" >
<parser>
<property name="delimiter" value=";" />
<!-- ignore header line -->
<property name="comments" value="toto" />
</parser>
<record name="record" minOccurs="0" maxOccurs="unbounded" class="com.stackoverflow.Product" />
</stream>
</beanio>
来源:http://beanio.org/2.0/docs/reference/index.html#CSVStreamFormat
另一种方法是使用camel-bindy
代替camel-beanio
和新选项skipFirstLine
(请参阅https://camel.apache.org/components/latest/bindy-dataformat.html#_1_csvrecord)
快捷方式:
一旦定义BeanReader来读取/处理记录,就可以使用它的计数为1的skip方法跳过标头。
e.g.
// Define Reader to process records
BeanReader beanReader = factory.createReader("STREAM",inputStreamReader);
// Skip First Record
beanReader.skip(1);
// Process rest of Stream
Object record;
do {
try {
record = beanReader.read();
}
catch (BeanReaderException e) {
e.printStackTrace();
}
} while(record !=null)
请参阅http://beanio.org/2.0/docs/reference/index.html#TheMappingFile.跳过方法签名:
public int skip(int count) throws BeanReaderException;