Apache Camel只读第一行

时间:2017-10-09 08:15:31

标签: apache apache-camel

我有一个要求,我必须根据内容动态推送目录上的文件。

与文件相关的信息位于文件的第一行。

由于文件的大小非常大,因此加载文件的全部内容将不合适  另外,我想在读取第一行后跳过文件的其余部分。以下是我写的代码

    from("file:D:\\camel\\input?recursive=true&delete=true")
            .split().tokenize("'",1)
            .process(new CustomProcessor())
            .to("file:D:\\camel\\output\\${header.foldername}");

该方法的问题是camel解析整个文件。此外,目标只获取在输出文件夹中被标记化的行而不是整个文件内容。

请协助

1 个答案:

答案 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);

     }