如何查询多个文件中的最后修改文件并发送到apache骆驼目标端点?
问题描述:
这里我们有4个不同时间戳的文件。我们只需要选择最新的一个(第一个文件的时间戳为2016年8月18日,使用Apache骆驼)。如何查询多个文件中的最后修改文件并发送到apache骆驼目标端点?
这可怎么实现的?我无法找到关于此主题的很多资源。
答
好像使用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
答
你可以按时间戳排序文件,然后告诉骆驼只拾取一个文件。
sortBy=file:modified&eagerMaxMessagesPerPoll=false&maxMessagesPerPoll=1
您还需要转向eager max消息。请参阅文件2文档中的更多详细信息,这些选项:http://camel.apache.org/file2
如果从一个文件目录与
from("file:...")
那么你也需要考虑如何处理其处理后的文件做费时,应该把它被删除/保持原样(例如noop)。例如,如果您删除该文件,那么Camel将在下一个轮询中拾取第二个最后修改的文件,依此类推。
如果您需要删除所有文件,那么恐怕骆驼并没有开箱即用,您可能需要编写一些逻辑来删除所有这些文件。
此解决方案看起来正确...我们如何使用Apache骆驼来做同样的事情。 –