如何从多个文件中轮询最后修改的文件并发送到apache camel中的目标端点?

时间:2016-08-18 13:00:08

标签: java file apache-camel last-modified

这里我们有4个不同时间戳的文件。我们要求只选择最新的(使用Apache驼峰时间戳为18/08/2016的第一个文件)。

demo

如何实施?我在这个主题上找不到太多资源。

4 个答案:

答案 0 :(得分:4)

您可以按时间戳对文件进行排序,然后告诉Camel只提取1个文件。

sortBy=file:modified&eagerMaxMessagesPerPoll=false&maxMessagesPerPoll=1

您还需要关闭热切的最大消息。有关这些选项,请参阅file2文档中的更多详细信息:http://camel.apache.org/file2

如果您使用

从文件目录中消费
from("file:...")

然后你还需要考虑如何处理文件,如果它被删除/保持原样(例如noop)。例如,如果您删除该文件,那么Camel将在下次轮询时拾取第二个修改后的文件,依此类推。

如果你需要删除所有文件,那么恐怕Camel没有开箱即用,你可能需要写一些自己删除所有文件的逻辑。

答案 1 :(得分:1)

在文件夹上使用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

答案 2 :(得分:0)

您可以使用Camel中的过滤器实现Jordi Castilla提供的方法。请参阅此处的doc: http://camel.apache.org/file2.html 请参阅有关使用过滤器的部分。

答案 3 :(得分:0)

检查Camel&#39; File Language。看起来file:modified可以帮助您