如何从多个文件中轮询最后修改的文件并发送到 apache camel 中的目标端点?
How to poll last modified file out of multiple files and send to target endpoint in apache camel?
这里我们有 4 个具有不同时间戳的文件。我们只需要选择最新的一个(使用 Apache camel 的第一个时间戳为 18/08/2016 的文件)。
如何实现?我找不到太多关于这个主题的资源。
似乎很容易在文件夹上使用 File::lastModified()
并循环到 File::listFiles()
:
public static void main(String[] args) {
final String folder = "D:\Users\tmp";
final File file = new File(folder);
long lastModified = Long.MAX_VALUE;
for (File f : file.listFiles()) {
if (f.lastModified() < lastModified)
lastModified = f.lastModified();
}
SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss");
System.out.println("Oldest is " + sdf.format(lastModified));
}
在我的 tmp
文件夹中:
data.csv 08/08/2016
data.json 28/07/2016
index.html 17/06/2016
map.csv 29/07/2016
输出:
Oldest is 06/17/2016 09:53:10
您可以使用Camel 中的过滤器实现Jordi Castilla 提供的方法。在这里查看文档:
http://camel.apache.org/file2.html
请参阅有关使用过滤器的部分。
检查 Camel 的 File Language。看起来 file:modified
应该对你有帮助
您可以按时间戳对文件进行排序,然后告诉 Camel 只拾取 1 个文件。
sortBy=file:modified&eagerMaxMessagesPerPoll=false&maxMessagesPerPoll=1
您还需要关闭 eager max messages。有关这些选项的更多详细信息,请参阅 file2 文档:http://camel.apache.org/file2
如果您使用
从文件目录中消费
from("file:...")
然后您还需要考虑处理文件后如何处理文件,是否应该将其删除/保持原样(例如 noop)。例如,如果您删除了文件,那么 Camel 将在下一次轮询时选择最后修改的第二个文件,依此类推。
如果您需要删除所有文件,恐怕 Camel 没有开箱即用的功能,您可能需要自己编写一些逻辑来删除所有这些文件。
这里我们有 4 个具有不同时间戳的文件。我们只需要选择最新的一个(使用 Apache camel 的第一个时间戳为 18/08/2016 的文件)。
如何实现?我找不到太多关于这个主题的资源。
似乎很容易在文件夹上使用 File::lastModified()
并循环到 File::listFiles()
:
public static void main(String[] args) {
final String folder = "D:\Users\tmp";
final File file = new File(folder);
long lastModified = Long.MAX_VALUE;
for (File f : file.listFiles()) {
if (f.lastModified() < lastModified)
lastModified = f.lastModified();
}
SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss");
System.out.println("Oldest is " + sdf.format(lastModified));
}
在我的 tmp
文件夹中:
data.csv 08/08/2016
data.json 28/07/2016
index.html 17/06/2016
map.csv 29/07/2016
输出:
Oldest is 06/17/2016 09:53:10
您可以使用Camel 中的过滤器实现Jordi Castilla 提供的方法。在这里查看文档: http://camel.apache.org/file2.html 请参阅有关使用过滤器的部分。
检查 Camel 的 File Language。看起来 file:modified
应该对你有帮助
您可以按时间戳对文件进行排序,然后告诉 Camel 只拾取 1 个文件。
sortBy=file:modified&eagerMaxMessagesPerPoll=false&maxMessagesPerPoll=1
您还需要关闭 eager max messages。有关这些选项的更多详细信息,请参阅 file2 文档:http://camel.apache.org/file2
如果您使用
从文件目录中消费from("file:...")
然后您还需要考虑处理文件后如何处理文件,是否应该将其删除/保持原样(例如 noop)。例如,如果您删除了文件,那么 Camel 将在下一次轮询时选择最后修改的第二个文件,依此类推。
如果您需要删除所有文件,恐怕 Camel 没有开箱即用的功能,您可能需要自己编写一些逻辑来删除所有这些文件。