【发布时间】:2016-08-18 13:00:07
【问题描述】:
【问题讨论】:
标签: java file apache-camel last-modified
【问题讨论】:
标签: java file apache-camel last-modified
您可以按时间戳对文件进行排序,然后告诉 Camel 只提取 1 个文件。
sortBy=file:modified&eagerMaxMessagesPerPoll=false&maxMessagesPerPoll=1
您还需要关闭急切的最大消息。在 file2 文档中查看这些选项的更多详细信息:http://camel.apache.org/file2
如果您使用
从文件目录中消费from("file:...")
然后您还需要考虑在文件处理后如何处理文件,是否应将其删除/保持原样(例如 noop)。例如,如果您删除该文件,那么 Camel 将在下次轮询时仅获取第二个最后修改的文件,依此类推。
如果您需要删除所有文件,那么恐怕 Camel 没有开箱即用的功能,您可能需要自己编写一些删除所有这些文件的逻辑。
【讨论】:
在文件夹上使用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 应该能帮到你
【讨论】: