如何使用camel-beanio跳过CSV标题行

时间:2015-10-31 18:56:38

标签: csv header apache-camel bean-io

如何从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>

但要使我的代码运行,我必须手动删除第一行(标题行)。如何自动跳过标题行?

3 个答案:

答案 0 :(得分:0)

要读取CSV文件并忽略标题的第一行,可以将标题的第一字段值定义为comments的{​​{1}}

CSV示例:

CSV Stream

映射文件:

toto;tata;titi
product1;1;18
product2;2;36
product3;5;102

来源http://beanio.org/2.0/docs/reference/index.html#CSVStreamFormat

另一种方法是使用<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> 代替camel-bindy和新选项camel-beanio(请参见https://camel.apache.org/components/latest/bindy-dataformat.html#_1_csvrecord

答案 1 :(得分:0)

快捷方式:

一旦定义了 BeanReader 来读取/处理记录,就使用它的带有计数 1 的跳过方法来跳过标题。

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;  

答案 2 :(得分:-1)

我不太确定&#39; camel-beanio&#39;你提到过。我觉得你的问题可以通过beanio提供的流来解决。流可以具有多种记录类型,例如标题,尾部和不同的记录类型,由“删除”标识。领域。所以当你解密你的记录时,你可以采取相应的行动来摆脱“记录”。对于该特定记录(在您的情况下忽略标题)。 这是对beanio流的引用 http://www.beanio.org/2.0/docs/reference/index.html#Streams

PS:请点击“已回复”字样。按钮,如果这可以帮助您查询