如何查询多个文件中的最后修改文件并发送到apache骆驼目标端点?

问题描述:

这里我们有4个不同时间戳的文件。我们只需要选择最新的一个(第一个文件的时间戳为2016年8月18日,使用Apache骆驼)。如何查询多个文件中的最后修改文件并发送到apache骆驼目标端点?

demo

这可怎么实现的?我无法找到关于此主题的很多资源。

好像使用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 
+0

此解决方案看起来正确...我们如何使用Apache骆驼来做同样的事情。 –

您可以实现方法由Jordi Castilla在Came中使用过滤器提供湖请参阅文档: http://camel.apache.org/file2.html 请参阅有关使用过滤器的部分。

检查骆驼的File Language。看起来像file:modified应该帮你

你可以按时间戳排序文件,然后告诉骆驼只拾取一个文件。

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

您还需要转向eager max消息。请参阅文件2文档中的更多详细信息,这些选项:http://camel.apache.org/file2

如果从一个文件目录与

from("file:...") 

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

如果您需要删除所有文件,那么恐怕骆驼并没有开箱即用,您可能需要编写一些逻辑来删除所有这些文件。