如何使用 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
选项,则会为文件和文件夹调用 GenericFileFilter
的 accept
方法。不要忘记处理文件夹。如果您 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;
我有基于 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
选项,则会为文件和文件夹调用 GenericFileFilter
的 accept
方法。不要忘记处理文件夹。如果您 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;