4
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Commons-IO:ディレクトリの内容変更を検知するio.monitorパッケージ

4
Posted at

ファイルの変更を検知

Commons-IOの中でも一風変わった機能があるパッケージである io.monitorパッケージ、これらはあるディレクトリ内のファイル変更や削除などを自動検知する仕組みを提供します。

提供されるクラスは以下のものです。デザインパターンの1つ、Observerパターンで作られています。

登場するクラスたち

io.monitorパッケージの中で、実際に扱うクラスたちは以下のものです。

  • FileAlterationMonitor
    • Observerを管理し、ディレクトリを監視する。監視の開始、終了を制御。
  • FileAlterationObserver
    • Listenerを扱う。複数のListenerを扱うことが可能。
  • FileAlterationListener(インタフェース)
    • ディレクトリの変更やファイルの作成など、検出する内容にあわせたメソッドを定義。
    • 空の実装クラス FileAlterationListenerAdaptor が存在する

使い方

以下、簡単な使い方です。

  • 監視するディレクトリを指定する
  • Monitorのインスタンスを生成
  • Observerのインスタンスを生成
  • Listenerのインスタンスを生成
    • 監視する内容を実装する
  • ObserverにListenerを登録する
  • MonitorにObserverを登録する
  • Monitorを起動する

実装例

MonitorSample.java(抜粋)
@Log4j2
public class MonitorSample
	public void start() throws Exception {
		// Monitorの生成。監視間隔はミリ秒。
		FileAlterationMonitor monitor = new FileAlterationMonitor(2000);
		// Observerの生成。監視するディレクトリを指定。
		File dir = new File("E:/target");
		FileAlterationObserver observer = new FileAlterationObserver(dir);
		// Listenerを生成して監視する内容を実装
		FileAlterationListener listener = new FileAlterationListenerAdaptor() {
			public void onDirectoryChange(File directory) {
				log.debug("onDirectoryChange:{}" , directory.getName());
				super.onDirectoryChange(directory);
			}

			@Override
			public void onDirectoryCreate(File directory) {
				log.debug("onDirectoryCreate:{}" , directory.getName());
				super.onDirectoryCreate(directory);
			}

			@Override
			public void onDirectoryDelete(File directory) {
				log.debug("onDirectoryDelete:{}" , directory.getName());
				super.onDirectoryDelete(directory);
			}

			@Override
			public void onFileChange(File file) {
				log.debug("onFileChange:{}" , file.getName());
				super.onFileChange(file);
			}

			@Override
			public void onFileCreate(File file) {
				log.debug("onFileCreate:{}" , file.getName());
				super.onFileCreate(file);
			}

			@Override
			public void onFileDelete(File file) {
				log.debug("onFileDelete:{}" , file.getName());
				super.onFileDelete(file);
			}

			@Override
			public void onStart(FileAlterationObserver observer) {
				log.debug("onStart:{}" , observer.toString());
				super.onStart(observer);
			}

			@Override
			public void onStop(FileAlterationObserver observer) {
				log.debug("onStop:{}" , observer.toString());
				super.onStop(observer);
			}
		};
		// ObserverにListerを登録
		observer.addListener(listener);
		// MonitorにObserverを登録
		monitor.addObserver(observer);
		// Monitorの起動
		monitor.start();
	}
}
4
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?