驼峰文件组件的"过滤器目录"是做什么的?



我想知道骆驼文件组件中'filterDirectory'参数的目的是什么。我没有找到任何有这个性质的例子。根据文档:

基于Simple语言筛选目录。例如,要筛选当前日期,您可以使用简单的日期模式,如${date:now:yyyMMdd}。

我写了一些示例路由来检查它的行为:

public class FilterDirectoryRoute extends RouteBuilder {
private static final String FILE = "file:";
private static final String START_DIR = "C:/test/camel/filterDirectoryRoute";
private final Map<String, String> params = Map.of(
"noop", "true",
"recursive", "true",
"filterDirectory", "${date:now:yyyy/DDD}"
);
@Override
public void configure() {
from(FILE + START_DIR + fileParams(params))
.log(DEBUG, log, "date = ${date:now:yyyy/DDD}")
.log(DEBUG, log, "body = ${body}")
.end();
}
}

filterDirectoryRoute目录有下一个结构:

📦filterDirectoryRoute
┣ 📂2020
┃ ┣ 📜1.txt
┃ ┣ 📜105.txt
┃ ┗ 📜15.txt
┗ 📂2021
┃ ┣ 📂268
┃ ┃ ┗ 📜268.txt
┃ ┣ 📂269
┃ ┃ ┗ 📜269.txt
┃ ┣ 📂270
┃ ┃ ┗ 📜270.txt
┃ ┣ 📂271
┃ ┃ ┗ 📜271.txt
┃ ┣ 📂272
┃ ┃ ┗ 📜272.txt

在这种配置下,路由只是遍历目录中的所有文件并读取它。因此,filterDirectory没有作用,因为它没有输入2021/270(270是一年中的当前日期)。

如果我删除recursive参数,没有文件被处理,因为没有文件直接在启动目录

问题是:filterDirectory选项如何使用,它能做什么?

在我看来,filterDirectory查询参数与文件语言一起使用。这意味着您必须构造一个实质上产生布尔结果的过滤器。类似于filterDirectory="${file:name} == ${date:now:yyyy/DDD}".

注意:我自己没有验证过。

编辑:我现在已经证实了我的预感下面的工作只读取文件2.txt

@Component
public class SampleFileRoute extends RouteBuilder {
@Override
public void configure() throws Exception {
from("file://folder?recursive=true&filterDirectory=${file:name} == 2021")
.log("${header.CamelFileRelativePath}");
}
}
📦folder
┣ 📂2020
┃ ┣ 📜1.txt
┗ 📂2021
┃ ┣ 📜2.txt

相关内容

  • 没有找到相关文章

最新更新