Apache Camel File2仅包含源目录中的特定子文件夹

时间:2019-01-31 06:02:50

标签: java apache-camel camel-ftp

我正在使用Apache Camel File2(SFTP)(具有Camel最新版本)和Java8 API。 我正在尝试开发MyRouteBuilder.java类,该类扩展了RouteBuilder类并实现configure方法。

我想将文件从源路径传输到目标路径。 在源端点的此处,指定URI参数“ include”以包括源路径下特定特定子文件夹中的文件,例如“ SubFolder1,SubFolder2,SubFolder3”。

示例源URI: 1)“文件:\ src \ SubFolder1 \。* \。txt” 2)“文件:\ src \ SubFolder2 \。* \。txt”

我尝试了下面的多个示例,甚至    例子:

 1) include=.SubFolder[1-2]\.*\.txt
 2) include=.SubFolder1|SubFolder2\.*\.txt
 3) include=SubFolder[1-2]\.*\.txt
 4) include=SubFolder1\.*\.txt
 5) include=.SubFolder(?)\.*\.txt

什么都没有。

请提出一种使用Java解决Apache Camel File2 API的方法。

public void configure() throws Exception {

    String sftpUrl = "sftp://" + user + "@" + hostName + sourcePath + "?" + "noop=true"
            + "&recursive=true&include=.*\\.txt$"+"&strictHostKeyChecking=no" + "&useUserKnownHostsFile=true" + "&password=RAW("
            + password + ")&preferredAuthentications=publickey,keyboard-interactive,password";  

    System.out.println("\n\n sftpUrl + " + sftpUrl + "\n\n");

    from(sftpUrl)
        .log(" Copying File : ${file:name} ").process(exchange -> {
        System.out.println("1. Processing a File  --> = " + exchange);
    }).to("file://" + destPath)
            // ;
    .log("Uploading file ${file:parent} / ${file:name} complete.");
}

2 个答案:

答案 0 :(得分:0)

如下所示,@ hk6279表示,FTP2继承File2,除非另有说明,否则FTP2上的File2行为可用。但是,@ hk6279突出显示了OP可能错过的一个非常重要的部分。

Only files (not directories) are matched for valid filename, if options such as: include or exclude are used.

这可能是引起麻烦的原因。


好像您是在指FTP2组件,而不是file2组件。请查看FTP component's test cases,以了解如何实现过滤。 它不支持include,如docs所示。

答案 1 :(得分:0)

您应该使用antInclude,因为它同时支持目录和文件。 顺便说一下,骆驼网站正在进行彻底的重新设计,与此同时,可以从github浏览最新的组件文档。

antInclude=F1/*.txt,F2/*.txt

所以请看:https://github.com/apache/camel/blob/master/components/camel-ftp/src/main/docs/ftp-component.adoc

还请注意,您可以浏览每个版本的文档(选择分支/标签)。