如何从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>
但要使我的代码运行,我必须手动删除第一行(标题行)。如何自动跳过标题行?
答案 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:请点击“已回复”字样。按钮,如果这可以帮助您查询