2011-11-20 10 views
8

ファイルやディレクトリが削除されたかどうかを検出したい。明らかに、ファイル/ディレクトリは既に削除されているため、Files.isDirectory(Path)と同等のファイルを使用することはできません。WatchService/Deletions/File or Directory?

2つのWatchServiceインスタンスを使用してファイルの変更やディレクトリの変更を監視することを考えましたが、ファイルやディレクトリの場合はいつも知っています。残念ながら私は適切な方法を見つけることができません。

編集:ファイル名とディレクトリの文字列表現のチェックに関する他の解決策はエラーが発生しやすいと思います。

+1

[これ](http://docs.oracle.com/javase/tutorial/essential/io/notification.html)を試しましたか? – home

+0

これがどのように役立つかはわかりません(WatchServiceを使用する前に読んでください)が、私は目が見えませんか? ;-) – Johannes

+0

ええ、多分あなたの質問を理解できませんでしたか?特定のディレクトリでサービスを登録することができます - その問題は何ですか? – home

答えて

2

あなたが見ているディレクトリに、メタデータのローカルコピーを保存します。単にエントリのリストだけでなく、それぞれがファイルやディレクトリであるかどうか、一度削除したい他の属性と一緒に削除します。サイズまたは最終変更時刻。削除通知を受け取ったら、このメタデータを参照することができます。

ウォッチループの開始時にこのメタデータストアにデータを格納し、ウォッチャーをENTRY_CREATEおよびENTRY_MODIFYに拡張して、ディレクトリの監視中に他の変更が行われたときにメタデータストアを最新の状態に保つことができます。

このデータを保持するために追加のオーバーヘッドがメモリに付加されることはありませんが、ほとんどの場合、それほど重要ではありません。

+0

良いアイデアですが、私の提案された解決策よりもオーバーヘッドが大きいようです。まあ、別の解決策は考えられません。 – Johannes

関連する問題