Apache Camel只读第一行
问题描述:
我有一个要求,我必须根据其内容动态地在目录上推文件。
Apache Camel只读第一行
与该目录相关的信息可在文件的第一行中找到。
由于文件的大小很大,加载文件的全部内容将不合适。
另外我想在读取第一行时跳过文件的其余部分。以下是我写
from("file:D:\\camel\\input?recursive=true&delete=true")
.split().tokenize("'",1)
.process(new CustomProcessor())
.to("file:D:\\camel\\output\\${header.foldername}");
问题与方法的代码是骆驼解析整个文件。此外,目标只获得在输出文件夹中被标记的行而不是整个文件内容。
请@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);
}
使用处理器和使用流式仅读取第一行。 –
HI Souciance你可以请分享一些示例代码,因为我如何获得在流中使用的文件名,因为我有一个目录中的文件列表和名称是动态的 – onlinejava
您可以从骆驼获取文件名为它是标题。然后使用java 8 streaming读取第一行。网上应该有很多例子。 –