如何用camelbeanio跳过CSV标题行



使用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 Streamcomments

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;  

相关内容

  • 没有找到相关文章

最新更新