File Connector を使用したファイルのリストの作成

List​ 操作を使用して、​directoryPath​ パラメーターで示されるパスにあるファイルとフォルダーのリストを作成します。​List​ 操作は、次の状態のメッセージの配列を返します。

  • 各メッセージがそのペイロードでファイルコンテンツを保持している。

  • ファイルのメッセージ属性セクションにファイルのメタデータ (名前、作成時間、サイズなど) が含まれている。

  • 要素がフォルダーの場合、ペイロードが空である。

List​ 操作には ​directoryPath​ パラメーターが必要です。このパラメーターは、ディレクトリのフルパスを指定しない場合、リストを作成するディレクトリの相対パスを表します。パスは、​config-ref​ パラメーターによって参照される設定で定義された作業ディレクトリの値に対して相対的です。設定が参照されていない場合、作業ディレクトリはデフォルトで ​user.home​ システムプロパティの値に設定されます。システムプロパティが設定されていない場合、コネクタは初期化に失敗します。

設定の定義の例については、​「ファイル接続設定」​を参照してください。

ファイル設定を参照することで相対パスを使用する ​List​ の例を次に示します。

<file:list config-ref="File_Config" directoryPath="relativePath" />
xml

前述のように、これはメッセージの配列を返します。Anypoint Studio では、DataSense に操作の出力のメタデータが表示されます。

list output

List​ 操作はディレクトリとファイル両方のリストを作成しますが、ファイルの場合、ペイロード内のファイルコンテンツの遅延ストリームも返されます。これを他の操作で直接コンシュームできます。つまり、ファイルコンテンツにアクセスするために、​List​ 操作の後に ​Read​ 操作を実行する必要はありません。例については、​「リストで返されるファイルの読み取り」​を参照してください。

リストで返されるファイルの読み取り

次の例は、​directoryPath​ 内のすべてのファイルとフォルダーのリストを ​foreach​ ループで作成します。

<file:list config-ref="File_Config" directoryPath="relativePath" />

<foreach>
    <choice>
        <when expression="#[not attributes.directory]">
            <logger message="Found file #[attributes.path] whose content is: #[payload]" />
        </when>
        <otherwise>
            <flow-ref name="process-directory" />
        </otherwise>
    </choice>
</foreach>
xml

foreach​ ループは、​choice​ コンポーネントで各要素がファイルであるかフォルダーであるかを判断します。 要素がファイルの場合、​『Logger』​ でそのパスとコンテンツが出力されます。要素がディレクトリの場合、別のフローに送信されて処理されます。

前述のように、​List​ 操作はすでに (遅延方法で) ペイロード内のファイルコンテンツを返しているため、​foreach​ ループ内に ​Read​ 操作はありません。そのため、ストリームが最後にコンシュームされないときにパフォーマンスやオーバーヘッドを心配する必要はありません。

サブフォルダー内のファイルとフォルダーのリストの作成

directoryPath​ のサブフォルダー内のファイルまたはフォルダーのリスト (再帰的リストなど) を作成するには、​recursive​ パラメーターを ​true​ に設定します。

<file:list config-ref="File_Config" directoryPath="relativePath" recursive="true" />
xml

一致条件でのファイルの絞り込み

<file:matcher>​ 要素を使用して、ファイルの受け入れまたは却下で使用する一致条件に基づいて、ファイルを絞り込むことができます。使用できるファイル一致ルールの例を次に示します。

例: ファイルマッチャー
<file:matcher
  filenamePattern="a?*.{htm,html,pdf}"
  path-pattern="a?*.{htm,html,pdf}"
  createdSince="2019-06-03T13:21:58+00:00"
  createdUntil="2019-07-03T13:21:58+00:00"
  updatedSince="2019-05-03T13:21:58+00:00"
  updatedUntil="2019-06-03T13:21:58+00:00"
  accessedSince="2019-06-03T13:21:58+00:00"
  accessedUntil="2019-06-03T13:21:58+00:00"
  directory="true|false"
  regularFile="true|false"
  symbolicLink="true|false"
  minSize="0"
  maxSize="1024" />
xml

上記のすべての属性は省略可能であり、提供されていない場合は無視されます。これらはすべて ​AND​ 操作の下で相互に関連します。

最上位の再利用可能なマッチャー

ファイルマッチャーは、次の例に示すように再利用可能な要素 (名前付きの最上位要素) にすることができます。

次に例を示します。

<file:matcher name="smallFileMatcher" maxSize="100" />

<flow name="smallFiles">
  <file:list path="~/smallfiles" matcher="smallFileMatcher" />
  ...
</flow>
xml

内部要素、再利用できないマッチャー

マッチャーは、次の例に示すように特定のコンポーネント専用の (再利用できない) 内部要素にすることができます。

<flow name="smallFiles">
	<file:list path="~/smallfiles">
        <file:matcher maxSize="100" />
	</file:list>
	...
</flow>
xml

Time Between Size Checks (サイズ確認の時間間隔) パラメーター

List​ 操作で返されるファイルコンテンツを読み取り、ファイルがまだ書き込み中であるか不明な場合は、​TimeBetweenSizeChecks​ パラメーターを使用できます。このパラメーターは、​TimeBetweenSizeCheckUnit​ パラメーターと連携します。この 2 つのパラメーターの組み合わせで、2 つのサイズ確認が実行されます。

  • 1 つは、ストリームがコンシュームされるポイントにフローが到達したとき。​List​ はファイルコンテンツを参照する遅延ストリームを返すため、​List​ 操作では時間の確認は行われません。そのため、ストリームがコンシュームされるときにのみサイズ確認を行うことが理にかなっています。

  • もう 1 つの確認は、​TimeBetweenSizeChecks​ および ​TimeBetweenSizeCheckUnit​ パラメーターで設定された待機時間後に実行。

この両方のサイズ確認で同じファイルサイズが返された場合、ストリームは正常にコンシュームされています。2 つのサイズ確認で異なるファイルサイズが返された場合、ファイルはまだ書き込み中であるため、ストリームはコンシュームされず、操作はエラーで失敗します。

反復可能ストリーム

List​ 操作では、Mule 4 で導入された反復可能ストリーム機能が使用されます。この操作ではメッセージのリストが返されます。各メッセージはリスト内のファイルを表し、ファイルへのストリームを保持します。デフォルトでは、ストリームは反復可能です。

詳細は、​「Mule 4 でのストリーミング」​を参照してください。

返されるファイルの数の制限と並び替え

List​ 操作の ​[Advanced (詳細)]​ 設定タブで、返されるファイルの数を制限してからファイルを並び替えるように ​[Subset (サブセット)]​ 項目を設定できます。[Limit (制限)] および [Offset (オフセット)] 属性は省略可能です。

List 操作の [Subset (サブセット)] 設定画面

設定 XML​ エディターでは、​<file:subset>​ 設定は次のように記述されます。

<file:subset criteria="DATE_CREATED" limit="5" offset="6" order="ASCENDING"/>
xml