100.25. ANT パスマッチャーを使用したフィルタリング
ANT パスマッチャーは、camel-Spring jar ですぐに利用できる状態で出荷されています。したがって、Maven を使用している場合は camel-spring に依存する必要があります。
その理由は、Spring の AntPathMatcher を利用して実際のマッチングを行うためです。
ファイルパスは、次のルールに一致します。
-
?
1 文字に一致 -
*
0 個以上の文字に一致 -
**
パス内の 0 個以上のディレクトリーに一致
Camel 2.10 以降の新しいオプション antInclude
および antExclude
オプションが追加され、フィルターを定義しなくても ANT スタイルの include/exclude を簡単に指定できるようになりました。詳細については、上記の URI オプションを参照してください。
以下のサンプルは、その使用方法を示しています。
100.25.1. コンパレータを使用した並べ替え
Camel は、プラグイン可能な並べ替え戦略をサポートしています。この戦略は、Java の java.util.Comparator
でビルドを使用することです。次に、このようなコンパレーターを使用してエンドポイントを設定し、処理する前に Camel にファイルをソートさせることができます。
サンプルでは、ファイル名でソートする独自のコンパレータを作成しました。
次に、sorter オプションを使用してルートを設定し、Spring XML ファイルで定義したソーター (mySorter
) を参照できます。
<!-- define our sorter as a plain spring bean --> <bean id="mySorter" class="com.mycompany.MyFileSorter"/> <route> <from uri="file://inbox?sorter=#mySorter"/> <to uri="bean:processInbox"/> </route>
URI オプションは、# 構文を使用して Bean を参照できます。上記の Spring DSL アプリケーションでは、id の前に #
を付けることで、レジストリー内の Bean を参照できます。したがって、sorter=#mySorter
と記述すると、Camel はレジストリーで ID が mySorter
の Bean を探すように指示されます。
100.25.2. sortBy を使用した並べ替え
Camel は、プラグイン可能な並べ替え戦略をサポートしています。このストラテジーは、File 言語 を使用して並べ替えを設定することです。sortBy
オプションは次のように設定されます。
sortBy=group 1;group 2;group 3;...
各グループはセミコロンで区切ります。単純な状況では、1 つのグループのみを使用するため、単純な例は次のようになります。
sortBy=file:name
これはファイル名でソートされます。グループの先頭に reverse:
を付けることで順序を逆にすることができるため、ソートは Z..A: になります。
sortBy=reverse:file:name
File 言語 の全機能を使用できるので、他のパラメーターの一部を使用できるので、ファイルサイズで並べ替える場合は、次のようにします。
sortBy=file:length
文字列の比較に ignoreCase:
を使用して、大文字と小文字を区別しないように設定できます。そのため、ファイル名の並べ替えを使用したいが大文字と小文字を区別したくない場合は、次のようにします。
sortBy=ignoreCase:file:name
ignore case と reverse を組み合わせることができますが、reverse を最初に指定する必要があります。
sortBy=reverse:ignoreCase:file:name
以下のサンプルでは、最後に変更されたファイルで並べ替えたいので、次のようにします。
sortBy=file:modified
次に、2 番目のオプションとして名前でグループ化し、同じ変更を含むファイルが名前でソートされるようにします。
sortBy=file:modified;file:name
ここで問題が発生しました。それを見つけることができますか?ファイルの変更されたタイムスタンプはミリ秒単位なので細かすぎますが、日付のみで並べ替えてから名前でサブグループ化したい場合はどうすればよいでしょうか?
File 言語 の実際の機能で、パターンをサポートする date コマンドを使用できます。したがって、これは次のように解決できます。
sortBy=date:file:yyyyMMdd;file:name
ええ、それは非常に強力です。ちなみに、グループごとにリバースを使用することもできるので、ファイル名を逆にすることができます。
sortBy=date:file:yyyyMMdd;reverse:file:name