我正在创建一个简单的文件传输实用程序,其中,根据用户输入,我在文件夹中搜索文件并将匹配的文件传输到目标位置。问题 是骆驼正在移动所有与.camel文件夹不匹配的文件,我不希望在下面出现这是我的摘录。
from("file:C:\\input?noop=true;").
filter(header(Exchange.FILE_NAME)
.contains("xyz")).split(body().tokenize("\n")).
streaming().bean(LineParser.class, "process").
to("file:"+ Constants.getMapping().get(argumentName)+"?
fileExist=Append");
谢谢!
答案 0 :(得分:1)
签出文件组件使用者选项:http://camel.apache.org/file2.html。您应该能够使用uri中的“过滤器”或“ filterFile”选项。如上所述,这些将在端点处过滤。如果您能够使用简单语言,则filterFile将更加简洁:
from("file:C:\\input?filterFile=...
否则,您可以创建一个过滤bean来处理过滤,并使用filter选项引用该bean。请注意,不再需要filter()。contains():
from("file:C:\\input?filter=#someFileFilter")
.split(body().tokenize("\n"))
.streaming()
.bean(LineParser.class, "process")
.to("file:"+ Constants.getMapping().get(argumentName)+"?fileExist=Append");
public class SomeFileFilter<T> implements GenericFileFilter<T> {
@Override
public boolean accept(GenericFile<T> file) {
// return true if file should be included, false if excluded
}
}
答案 1 :(得分:0)
在noop = true之后删除分号,该属性将开始工作,不赞成将已处理的文件移动到.camel
已处理的文件是所有无例外处理的文件,因此即使匹配的文件也将保留在C:\ input目录中。当使用noop = true时,默认幂等存储库在内存中。因此,在您重启应用后,已经处理过的文件将再次被处理。因此,您需要创建自己的非内存幂等存储库。