如何使用apache camel中的文件名日期轮询文件?

时间:2016-06-30 12:51:56

标签: java apache-camel

我有文件列表,文件名中包含日期,如A_2016_12_30等。我需要轮询仅按日期排序的文件。

请参阅下面的文件列表。

enter image description here

我在文件组件中尝试了以下参数。

  1. 使用文件时间戳排序文件时效果很好。

    file://<some location>?sortBy=file:modified
    
  2. 根据文件名不起作用。面对这里的问题。

    文件:// sortBy =日期:文件:YYYY-MM-DD

  3. 是否有另一种方法可以使用正则表达式或其他方式按文件日期进行排序?

    以下是一些有用的链接:

    1. http://camel.apache.org/file-language.html
    2. http://camel.apache.org/file2.html

2 个答案:

答案 0 :(得分:3)

用Java编写自己的文件排序逻辑,并使用sorter选项对其进行配置。

内置的sort by选项用于正常的排序用例。您有特殊需要,然后必须编写一些代码来进行这种排序。

答案 1 :(得分:3)

这是克劳斯说的排序逻辑的例子。

package com.example;
import java.util.Comparator;
import org.apache.camel.component.file.GenericFile;

public class DateFileSorter<T> implements Comparator<GenericFile<T>> {

    @Override
    public int compare(GenericFile<T> f1, GenericFile<T> f2) {
        String fileDate1 = getDateFromFilename(f1.getFileName());
        String fileDate2 = getDateFromFilename(f2.getFileName());
        return fileDate1.compareTo(fileDate2);
    }

    /**
     * Return date from file name between "_" and "."
     */
    private String getDateFromFilename(String fileName) {
        return fileName.substring(fileName.indexOf("_") + 1, fileName.indexOf("."));
    }
}

将此行添加到beans.xml文件并将sorter =#fileSorter添加到File端点。

<bean id="fileSorter" class="com.example.DateFileSorter"/>

您的文件在阅读后订购。

: C_2016-01-14.xml
: A_2016-01-15.xml
: C_2016-06-01.xml
: A_2016-06-02.xml
: C_2016-06-02.xml
: A_2016-06-03.xml
: C_2016-06-03.xml
: A_2016-06-04.xml
: C_2016-12-29.xml
: A_2016-12-30.xml