Camel文件组件的“filterDirectory”有什么作用?

yxyvkwin  于 2022-11-07  发布在  Apache
关注(0)|答案(1)|浏览(176)

我想知道Camel File组件中的“filterDirectory”参数的用途是什么。我没有找到任何使用此属性的示例。根据docs
基于简单语言筛选目录。例如,要筛选当前日期,您可以使用简单日期模式,如${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选项及其作用?

jmo0nnb3

jmo0nnb31#

在我看来,filterDirectory query-parameter是和File Language.一起使用的,这意味着你必须构造一个过滤器,它本质上产生一个布尔结果,类似于filterDirectory="${file:name} == ${date:now:yyyy/DDD}"
注:我自己还没有验证过。

编辑:我现在已经验证了我的预感

下面的代码可以工作,并且只读取文件2.txt
第一个

相关问题