如何使用 Apache Camel 的文件组件 select 子文件夹?

How to select subfolder using File component of Apache Camel?

我有基于 Spring Boot 的 Camel 应用程序,有一个定义的路由应该轮询特定文件夹(例如 C:/test)。在此文件夹中,有按日期顺序命名的子文件夹:196、197、198 等。我需要过滤这些子文件夹并选择名称中具有最大值的文件夹。换句话说,我需要为文件组件动态选择文件夹,例如C:/test/197.

我尝试使用参数 filterDirectory,例如将其设置为 "${date:now:yyyy}"。我尝试了文件夹结构的其他配置,在我看来这个参数不起作用。

可以使用 Camel 实现这样的子文件夹选择吗?

更新: 目前没有机会从代码扫描根文件夹中的子文件夹,因此解决方案应该只依赖于 Camel 框架。

如果过滤文件或文件夹的可配置选项不适合您的情况,您可以实施 GenericFileFilter class 并将其配置为 filter 选项。

GenericFileFilter class 只包含一个 accept 方法 returns true(导入文件)或 false(文件被忽略)。

请注意,如果要处理子目录及其文件,则需要配置recursive=true。如果没有递归选项,Camel 默认会忽略所有子目录。

如果您激活 recursive 选项,则会为文件和文件夹调用 GenericFileFilteraccept 方法。不要忘记处理文件夹。如果您 return false 目录中的所有文件都将被忽略。

所以对于你的情况(从某个子文件夹导入所有文件)我看到了这样的东西

@Override
public boolean accept(GenericFile file) {
    correctSubfolder = ... calculate name

    if (file.isDirectory() && file.getFileName().equals(correctSubfolder)) {
        // walk into the correct subdirectory
        return true;
    }

    if (!file.isDirectory() && file.getParent().equals(correctSubfolder)) {
        // only process files of the correct subdirectory
        return true;
    }

    // ignore everything else
    return false;