通过仅删除csv的标题行(即正文的第一行)来读取csv文件内容并生成文本文件作为输出。 我可以通过放置数据来生成文本文件,但是如何从csv中删除标题/第一行却无法做到这一点。
使用骆驼2.32.2
由于我是骆驼新手,所以我尝试了一些方法,例如 此版本中首先没有removefirstline / remove标头。 我希望以相同的dsl语言完成它,而不是通过编写一些处理器等来完成。 下面是读取csv并将数据放入文本文件的基本代码,但是如何删除csv的标头并放入其余数据。
<route id="convertFileContents">
<from id="_from1" uri="file:{{INPUT_FILEPATH}}?include=.*.csv&moveFailed={{ERROR_FILEPATH}}&move={{PROCESSED_FILEPATH}}&noop=false" />
<log id="_log1" message="CONTENTS OF THE CSV BEFORE TRANFORMATION-->${body}" />
<convertBodyTo id="_convertBodyTo1" type="java.lang.String" />
<setHeader headerName="fName" id="_setHeader1">
<simple>${file:onlyname.noext}</simple>
</setHeader>
<setBody id="_setBody1">
<simple>${body}</simple>
</setBody>
<log id="_log2" message="CONTENTS OF THE CSV AFTER TRANFORMATION-->${body}" />
<to id="_to2" uri="file:{{GENERATED_FILEPATH}}?fileName=${headers.fName}.txt" />
</route>
文件输入:csv
Accident Description,Reported By,Date Of Loss,Reported Date
car hit,john,4/20/2012,11-Apr-19
Crane fell,john,9/1/2011,11-Apr-19
文件预期输出:文本
car hit,john,4/20/2012,11-Apr-19
Crane fell,john,9/1/2011,11-Apr-19
答案 0 :(得分:0)
您可以通过使用骆驼绑定和属性skipFirstLine来实现。
定义一个POJO类: 导入org.apache.camel.dataformat.bindy.annotation.CsvRecord; 导入org.apache.camel.dataformat.bindy.annotation.DataField;
@CsvRecord(separator = ",", skipFirstLine = true)
public class test
{
@DataField(pos = 1)
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@DataField(pos = 2)
private String age;
public String getAge() {
return age;
}
在您的路线上,您可以按以下方式进行封送
from("file:/test?include=.*.csv&noop=true").routeId("test")
.unmarshal(new BindyCsvDataFormat(test.class))
.marshal(new BindyCsvDataFormat(test.class))
.to("file:/test/?fileName=output.txt&fileExist=Append");