我正在使用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.");
}
答案 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
还请注意,您可以浏览每个版本的文档(选择分支/标签)。