我有一个包含2000 行的csv 文件。我希望一次将其拆分 20 行并将每行发送到 apache camel 中的处理器。如何使用Splitter EIP做到这一点?请帮忙 ..
问问题
2928 次
2 回答
2
我建议花一些时间研究 Apache Camel 文档。例如,在 Splitter EIP 页面上,它都记录了您如何做到这一点。
请参阅http://camel.apache.org/splitter部分通过将 N 行组合在一起来拆分文件
于 2013-09-03T15:07:55.123 回答
1
package com.camel;
import org.apache.camel.CamelContext;
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.dataformat.csv.CsvDataFormat;
import org.apache.camel.impl.DefaultCamelContext;
import org.apache.commons.csv.CSVFormat;
import org.apache.commons.csv.QuoteMode;
public class FileSplitter {
public static void main(String args[]) throws Exception {
CamelContext context = new DefaultCamelContext();
CsvDataFormat csvParser = new CsvDataFormat(CSVFormat.DEFAULT);
csvParser.setSkipHeaderRecord(true);
csvParser.setQuoteMode(QuoteMode.ALL);
context.addRoutes(new RouteBuilder() {
public void configure() {
String fileName = "Hello.csv";
int lineCount = 20;
System.out.println("fileName = " + fileName);
System.out.println("lineCount = " + lineCount);
from("file:data/inbox?noop=true&fileName=" + fileName).unmarshal(csvParser).split(body()).streaming()
.aggregate(constant(true), new ArrayListAggregationStrategy()).completionSize(lineCount)
.completionTimeout(1500).marshal(csvParser)
.to("file:data/outbox?fileName=${file:name.noext}_${header.CamelSplitIndex}.csv");
}
});
context.start();
Thread.sleep(10000);
context.stop();
System.out.println("End");
}
}
于 2018-03-27T12:13:03.120 回答