「駑馬十駕」を信念に IT系情報を中心に調べた事をコツコツ綴っています。

Java:フォルダ監視(watch service)で変更を検知する方法

ファイル監視は、ログの更新検知、外部連携ファイルの受信待ち処理、バッチ処理のトリガーなど、業務システムやツール作成で頻繁に必要になる機能です。
Javaには標準で**WatchService API**が用意されており、追加ライブラリなしでフォルダの変更を監視できます。

本記事では、WatchService の基本的な使い方から、作りがちな落とし穴・例外パターンまでまとめています。


🔍 WatchService で検知できるイベント種類

イベント種類内容
ENTRY_CREATEファイル・フォルダが作成されたタイミング
ENTRY_MODIFY既存ファイルの更新
ENTRY_DELETE削除時

※Windows と Linux では MODIFY の挙動が異なることがあります。
(例)Windows は保存時に複数回 MODIFY が発生しがちです。


📌 基本サンプル:フォルダ監視してイベントを表示するコード


💡 注意点・よくある落とし穴

問題点よくある症状対策
MODIFY が複数回発生Windows で保存時に連続イベント一定時間バッファリング or ハッシュ比較
サブフォルダの変更が検知されない下層フォルダ変更が無視される再帰登録が必要
監視対象フォルダが消えると止まる例外またはreset()がfalseに再監視ロジックを入れる
巨大ファイルアップロード中にイベント発火完了前に処理が動くサイズ・ロック状態チェックが必要

📌 サブフォルダも監視する再帰登録版サンプル


🧰 業務システムでの実運用ポイント

内容推奨事項
CPU 負荷take() で待機するため基本問題なし
ログ運用必ずファイル名・日時で記録
存在確認大容量ファイルの場合「完成」判定が必要
再起動バックアップJVMプロセスが停止すると監視も停止 → JP1等のジョブ管理併用推奨

まとめ

Java の WatchService を利用すると、追加ライブラリなしでフォルダの変更を自動検知できます。
サーバー間連携やバッチ処理トリガー、ログ監視ツールなど様々なシーンで有用ですが、OSごとの挙動差や複数イベント発火といった癖があるため、実装時には考慮する必要があります。

標準APIだけで完結するため小規模な監視機能であれば十分活用できます。

0 0
Article Rating
申し込む
注目する
guest
0 コメント一覧
最も古い
最新 高評価
インラインフィードバック
すべてのコメントを見る

Ads by Google

0 0
Article Rating
申し込む
注目する
guest
0 コメント一覧
最も古い
最新 高評価
インラインフィードバック
すべてのコメントを見る
0
あなたの考えが大好きです、コメントしてください。x