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协助

+0

使用处理器和使用流式仅读取第一行。 –

+0

HI Souciance你可以请分享一些示例代码,因为我如何获得在流中使用的文件名,因为我有一个目录中的文件列表和名称是动态的 – onlinejava

+1

您可以从骆驼获取文件名为它是标题。然后使用java 8 streaming读取第一行。网上应该有很多例子。 –

感谢和@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); 

    }