パッケージ org.opengion.fukurou.fileexec

## クラス FileWatch

- java.lang.Object
- - org.opengion.fukurou.fileexec.FileWatch

- すべての実装されたインタフェース:
    `Runnable`

      public class FileWatch
      extends Object
      implements Runnable

  FileWatch は、ファイル監視を行うクラスです。

       ファイルが、追加(作成)、変更、削除された場合に、イベントが発生します。
       このクラスは、Runnable インターフェースを実装しているため、Thread で実行することで、
       個々のフォルダの監視を行います。

  変更履歴:
    7.0.0.0 (2017/07/07) 新規作成
  バージョン
    7.0
  作成者
    Kazuhiko Hasegawa
  導入されたバージョン:
    JDK1.8,

- - ### フィールドの概要

    フィールド
    修飾子とタイプ | フィールド | 説明
    --- | --- | ---
    `static WatchEvent.Kind<Path>` | `CREATE` | Path に、WatchService を register するときの作成イベントの簡易指定できるように。
    `static WatchEvent.Kind<Path>` | `DELETE` | Path に、WatchService を register するときの削除イベントの簡易指定できるように。
    `static String` | `DIR_WATCH_EVENT` | DirWatch でスキャンした場合のｲﾍﾞﾝﾄ名 "DirWatch"
    `static WatchEvent.Kind<Path>` | `MODIFY` | Path に、WatchService を register するときの変更イベントの簡易指定できるように。
    `static WatchEvent.Kind<?>` | `OVERFLOW` | Path に、WatchService を register するときの特定不能時イベントの簡易指定できるように。

  - ### コンストラクタの概要

    コンストラクタ
    コンストラクタ | 説明
    --- | ---
    `FileWatch​(Path dir)` | 処理対象のフォルダのパスオブジェクトを指定して、ファイル監視インスタンスを作成します。
    `FileWatch​(Path dir, boolean useTree)` | 処理対象のフォルダのパスオブジェクトと、監視対象方法を指定して、ファイル監視インスタンスを作成します。

  - ### メソッドの概要

    すべてのメソッド インスタンス・メソッド concreteメソッド
    修飾子とタイプ | メソッド | 説明
    --- | --- | ---
    `void` | `callback​(BiConsumer<String,​Path> act)` | イベントの種類と、ファイルパスを、引数に取る BiConsumer ダオブジェクトを設定します。
    `boolean` | `isErrorStatus()` | このファイル監視で、最後に処理した結果が、エラーの場合に、true を返します。
    `void` | `run()` | Runnableインターフェースのrunメソッドです。
    `void` | `setDirWatchEndsWith​(String... endKey)` | 何らかの原因でイベントを掴み損ねた場合の、フォルダスキャンの対象ファイルの拡張子を指定します。
    `void` | `setEventKinds​(WatchEvent.Kind<?>... kind)` | 指定のイベントの種類のみ、監視対象に設定します。
    `void` | `setPathEndsWith​(String... endKey)` | 指定のパスが、指定の文字列と、終端一致(endsWith) したパスのみ、callback されます。
    `void` | `setPathMatcher​(PathMatcher pathMch)` | 指定のパスの照合操作で、パターンに一致したパスのみ、callback されます。
    `void` | `setUseDirWatch​(boolean flag)` | 何らかの原因でイベントを掴み損ねた場合に、フォルダスキャンするかどうかを指定します。
    `void` | `start()` | フォルダの監視を開始します。
    `void` | `stop()` | フォルダの監視を終了します。
    `String` | `toString()` | このオブジェクトの文字列表現を返します。

    - ### クラスから継承されたメソッド java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait`

- - ### フィールドの詳細

    - #### CREATE

          public static final WatchEvent.Kind<Path> CREATE

      Path に、WatchService を register するときの作成イベントの簡易指定できるように。

    - #### MODIFY

          public static final WatchEvent.Kind<Path> MODIFY

      Path に、WatchService を register するときの変更イベントの簡易指定できるように。

    - #### DELETE

          public static final WatchEvent.Kind<Path> DELETE

      Path に、WatchService を register するときの削除イベントの簡易指定できるように。

    - #### OVERFLOW

          public static final WatchEvent.Kind<?> OVERFLOW

      Path に、WatchService を register するときの特定不能時イベントの簡易指定できるように。

    - #### DIR_WATCH_EVENT

          public static final String DIR_WATCH_EVENT

      DirWatch でスキャンした場合のｲﾍﾞﾝﾄ名 "DirWatch"
      関連項目:
        定数フィールド値

  - ### コンストラクタの詳細

    - #### FileWatch

          public FileWatch​(Path dir)

      処理対象のフォルダのパスオブジェクトを指定して、ファイル監視インスタンスを作成します。 ここでは、指定のフォルダの内のファイルのみ監視します。 これは、new FileWatch( dir , false ) とまったく同じです。
      パラメータ:
        `dir` - 処理対象のフォルダオブジェクト

    - #### FileWatch

          public FileWatch​(Path dir,
                           boolean useTree)

      処理対象のフォルダのパスオブジェクトと、監視対象方法を指定して、ファイル監視インスタンスを作成します。 useTree を true に設定すると、指定のフォルダの内のフォルダ階層を、すべて監視対象とします。
      パラメータ:
        `dir` - 処理対象のフォルダのパスオブジェクト
        `useTree` - フォルダツリーの階層をさかのぼって監視するかどうか(true:フォルダ階層を下る)

  - ### メソッドの詳細

    - #### setEventKinds

          public void setEventKinds​(WatchEvent.Kind<?>... kind)

      指定のイベントの種類のみ、監視対象に設定します。 ここで指定したイベントのみ、監視対象になり、callback されます。 第一引数は、イベントの種類(ENTRY_CREATE,ENTRY_MODIFY,ENTRY_DELETE,OVERFLOW)
      パラメータ:
        `kind` - 監視対象に設定するイベントの種類
      関連項目:
        `StandardWatchEventKinds`

    - #### setPathMatcher

          public void setPathMatcher​(PathMatcher pathMch)

      指定のパスの照合操作で、パターンに一致したパスのみ、callback されます。 ここで指定したパターンの一致を判定し、一致した場合は、callback されます。 指定しない場合は、すべて許可されたことになります。 なお、#setPathEndsWith(String...) と、この設定は同時には行うことは出来ません。 (最後に登録した条件が、適用されます。)
      パラメータ:
        `pathMch` - パスの照合操作のパターン
      関連項目:
        `PathMatcher`, `setPathEndsWith(String...)`

    - #### setPathEndsWith

          public void setPathEndsWith​(String... endKey)

      指定のパスが、指定の文字列と、終端一致(endsWith) したパスのみ、callback されます。 これは、#setPathMatcher(PathMatcher) の簡易指定版です。 指定の終端文字列(一般には拡張子)のうち、ひとつでも一致すれば、true となりcallback されます。 指定しない場合(null)は、すべて許可されたことになります。 終端文字列の判定には、大文字小文字の区別を行いません。 なお、#setPathMatcher(PathMatcher) と、この設定は同時には行うことは出来ません。 (最後に登録した条件が、適用されます。)
      パラメータ:
        `endKey` - パスの終端一致のパターン
      関連項目:
        `setPathMatcher(PathMatcher)`

    - #### callback

          public void callback​(BiConsumer<String,​Path> act)

      イベントの種類と、ファイルパスを、引数に取る BiConsumer ダオブジェクトを設定します。 これは、関数型インタフェースなので、ラムダ式またはメソッド参照の代入先として使用できます。 イベントが発生したときの イベントの種類と、そのファイルパスを引数に、accept(String,Path) メソッドが呼ばれます。 第一引数は、イベントの種類(ENTRY_CREATE,ENTRY_MODIFY,ENTRY_DELETE,OVERFLOW) 第二引数は、ファイルパス(監視フォルダで、resolveされた、正式なフルパス)
      パラメータ:
        `act` - 2つの入力(イベントの種類 とファイルパス) を受け取る関数型インタフェース
      関連項目:
        `BiConsumer.accept(Object,Object)`

    - #### setUseDirWatch

          public void setUseDirWatch​(boolean flag)

      何らかの原因でイベントを掴み損ねた場合に、フォルダスキャンするかどうかを指定します。 スキャン開始の遅延時間と、スキャン間隔、ファイルのタイムスタンプとの比較時間等は、 DirWatch の初期値をそのまま使用するため、ここでは指定できません。 個別に指定したい場合は、このﾌﾗｸﾞをfalse にセットして、個別に、DirWatch を作成してください。 このメソッドでは、#setPathEndsWith( String... )や、#setPathMatcher( PathMatcher ) で 指定した条件が、そのまま適用されます。
      パラメータ:
        `flag` - フォルダスキャンするかどうか(true:する/false:しない)
      関連項目:
        `DirWatch`

    - #### setDirWatchEndsWith

          public void setDirWatchEndsWith​(String... endKey)

      何らかの原因でイベントを掴み損ねた場合の、フォルダスキャンの対象ファイルの拡張子を指定します。 このメソッドを使用する場合は、useDirWatch は、true にセットされます。 スキャン開始の遅延時間と、スキャン間隔、ファイルのタイムスタンプとの比較時間等は、 DirWatch の初期値をそのまま使用するため、ここでは指定できません。 このメソッドでは、DirWatch 対象の終端パターンを独自に指定できますが、FileWatch で で指定した条件も、クリアされるので、含める必要があります。
      パラメータ:
        `endKey` - パスの終端一致のパターン
      関連項目:
        `DirWatch`

    - #### isErrorStatus

          public boolean isErrorStatus()

      このファイル監視で、最後に処理した結果が、エラーの場合に、true を返します。 通常は、対象フォルダが見つからない場合や、フォルダスキャン（DirWatch）で エラーが発生した場合に、true にセットされます。 また、stop() メソッドが呼ばれた場合も、true にセットされます。
      戻り値:
        エラー状態(true:エラー,false:正常)
      変更履歴:
        7.2.9.4 (2020/11/20) PMD:volatile boolean の代替え。

    - #### start

          public void start()

      フォルダの監視を開始します。
      変更履歴:
        7.2.9.4 (2020/11/20) PMD:volatile boolean の代替え。 自身を、Threadに登録して、Thread#start() を実行します。 内部の Thread オブジェクトがなければ、新しく作成します。 すでに、実行中の場合は、何もしません。 条件を変えて、実行したい場合は、stop() メソッドで、一旦スレッドを 停止させてから、再び、#start() メソッドを呼び出してください。

    - #### stop

          public void stop()

      フォルダの監視を終了します。 自身を登録しているThreadに、割り込みをかけるため、 Thread#interrupt() を実行します。 フォルダ監視は、ファイル変更イベントが発生するまで待機していますが、 interrupt() を実行すると、強制的に中断できます。 内部の Thread オブジェクトは、破棄するため、再び、start() メソッドで 実行再開することが可能です。
      変更履歴:
        7.2.9.4 (2020/11/20) PMD:volatile boolean の代替え。

    - #### run

          public void run()

      Runnableインターフェースのrunメソッドです。 規定のスケジュール時刻が来ると、呼ばれる runメソッドです。
      定義:
        `run` インタフェース内 `Runnable`
      変更履歴:
        7.2.5.0 (2020/06/01) LOGGERを使用します。, 7.2.9.4 (2020/11/20) PMD:volatile boolean の代替え。

    - #### toString

          public String toString()

      このオブジェクトの文字列表現を返します。
      オーバーライド:
        `toString` クラス内 `Object`
      戻り値:
        このオブジェクトの文字列表現