ファイルコネクタを使用したファイルのリストの作成

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

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

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

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

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

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

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

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

前述のように、これはメッセージの配列を返します。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>

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

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

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

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

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

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

<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" />

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

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

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

次に例を示します。

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

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

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

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

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

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

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

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

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

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

反復可能ストリーム

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

このトピックについての詳細は、Mule 4 でのストリーミング​を参照してください。

Was this article helpful?

💙 Thanks for your feedback!