我有一个要求,我必须根据内容动态推送目录上的文件。
与文件相关的信息位于文件的第一行。
由于文件的大小非常大,因此加载文件的全部内容将不合适 另外,我想在读取第一行后跳过文件的其余部分。以下是我写的代码
from("file:D:\\camel\\input?recursive=true&delete=true")
.split().tokenize("'",1)
.process(new CustomProcessor())
.to("file:D:\\camel\\output\\${header.foldername}");
该方法的问题是camel解析整个文件。此外,目标只获取在输出文件夹中被标记化的行而不是整个文件内容。
请协助
答案 0 :(得分:0)
感谢@claus和@Souciance的反馈意见。实际上我有另一个挑战我收到的许多文件都没有'\ n'或'\ r'作为分隔符,因此即使阅读单个文件就像读取整个文件一样。我使用带分隔符的扫描仪实现了解决方案,如下所示。
我的路由器定义如下
@Override
public void configure() throws Exception {
from("file:D:\\camel\\input?recursive=true&delete=true")
.process(new CustomProcessor())
.recipientList(header("foldername"));
}
处理器代码
@Override
public void process(Exchange exchange) throws Exception {
File data = exchange.getIn().getBody(File.class);
Scanner sc = new Scanner(data,"UTF-8");
sc.useDelimiter("'");
String folderPath="";
while (sc.hasNext()){
String line = (String) sc.next();
//business logic
break;
}
sc.close();
String destDir = "file:D:\\camel\\output\\"+folderPath;
exchange.getIn().setHeader("foldername",destDir);
}