2016年11月30日水曜日

ディレクトリの監視(監視ディレクトリの登録方法)

みなさん。 こんばんは。

今日はディレクトリの監視について見ていきましょう。

ディレクトリの監視とは、指定したディレクトリに関する変更があるかどうかチェックする機能です。

標準では、ファイルやディレクトリの作成、削除、変更の監視を行うことができます。

既存のFileクラスでは、監視機能は提供されていませんでした。

このため、定期的にファイル一覧を取得するなどして監視を行う必要がありましたが、NIO.2を使用すれば簡単に監視を行うことができます。

ディレクトリの監視を行うのはWatchServiceインターフェースです。

これはFilesSystemクラスから取得します。

WatchServiceオブジェクトを取得するのはFileSystemクラスのnewWatchServiceメソッドです。

ファイルシステムがディレクトリの監視に対応していない場合、UnsupportedOperationException例外がスローされます。

ターゲットとなるディレクトリの監視を開始するには、Pathインターフェースのregisterメソッドを使用します。

registerメソッドの第1引数がWatchServiceオブジェクト、第2引数は可変長引数で、ここにイベントの種類を列挙します。

第2引数の型はWatchEvent.Kindインターフェースです。

しかし、実際に使用されるのはWatchService.Kindインターフェースを実装したStandardWatchEventKindsクラスになります。

StandartWatchEventKindsクラスには4種類の定数が定義されていますが、registerメソッドで使用できるのは以下の3種類です。


  • ENTRY_CREATE : ファイル/ディレクトリの作成
  • ENTRY_DELETE : ファイル/ディレクトリの削除
  • ENTRY_MODIFY : ファイル/ディレクトリの更新


なお、registerメソッドの第1引数にディレクトリではないPathオブジェクトを指定すると、NotDirectoryException例外がスローされます。

では実際に監視対象となるディレクトリの登録例を見てみましょう。

// WatchServiceオブジェクトの生成
WatchService watchService = FileSystems.getDefault().newWatchService();
// 監視の対象となるディレクトリ
Path target = Paths.get(targetDirectory);
// ディレクトリの監視を登録
target.register(watchService,
                    StandardWatchEventKinds.ENTRY_CREATE,
                    StandardWatchEventKinds.ENTRY_DELETE,
                    StandardWatchEventKinds.ENTRY_MODIFY);

上記のソースでは、デフォルトのファイルシステムを使用してWatchServiceオブジェクトを取得しています。

そして、ディレクトリに対して、ENTRY_CREATE、ENTRY_DELETE、ENTRY_MODIFYの3種類の監視イベントを登録しています。

ディレクトリ監視の登録をすると、ディレクトリの監視が開始されます。

ディレクトリの監視の登録が終わったので、実際にどのようにディレクトリの監視するのかは次回に記述していきます。

今日はこの辺にしておきましょう。

それではまた!
人気ブログランキングへ

0 件のコメント:

コメントを投稿