2012-04-04 16 views
4

javaを使用して、システム上の選択したディレクトリの変更を監視したいとします。 watchserviceはwatchserviceをJava 7で少し考えていますが、watchserviceは変更イベント(MODIFY、DELETE)が発生するディレクトリ名のみを返します。 反対側では、変更を行ったユーザーのような変更に関するすべての情報が必要です。Javaによるファイルシステムの変更の監視

NTFSファイルシステムで変更ジャーナルを読んでみたいと思うようなものです。 Javaでこのような変更を非同期的に記録する方法はありますか? ...

ありがとうございます。

答えて

3

ないプロジェクトにインポートライブラリを追加する機能を持っていますが、コモンズ-ioは、あなたのニーズに合わせてFileAlterationObserverを持っているかどうかわから:

http://commons.apache.org/io/api-release/org/apache/commons/io/monitor/FileAlterationObserver.html

+0

+1これは非常に素晴らしい図書館ですが、何か変わったときには手に入れられませんが、誰が何を作ったのかは分かりません。 –

+1

これは良いライブラリです。しかし、私はファイルシステムの変更のための非同期イベントをしたいのですが、それはポーリング技術を使用すると思う。とにかく、私はこのライブラリをもっと探求します。はい、ライブラリを追加する機能があります。 –

2

あなたはjava7を使用している場合 java.nio.file.FileSystemを見てあなただけNOTIF取得したい場合は詳細は と WatchService

Oracle tutorial

+0

+1 "out-of-the-box"解決策: – quaylar

+1

しかし、私はすでに質問で言及されたwatchserviceを経由します –

0

を参照してください。何かが起こったときに答えに掲示されている図書館の1つを使うことができます。

あなたは小さな例を使って自分でそれをしたい場合は(そして、あなたは、Windowsに限られている)、このarticle about Java Native Interfaceを見てみましょう。 ReadDirectoryChanges関数を使用すると、非同期通知を受信することができます。

本当にが変更を行ったことを知る必要がある場合は...幸運を祈る!私が知っていること(Windowsのみ)については、Windowsはその情報を保存しないため、これは簡単なトピックではありません。 Object AuditingでJNI経由で入手できますが、有効にする必要があります。システムが少し遅くなります。詳細については、this postをご覧ください。

+0

ありがとう。情報は非常に役立ちます。実際に私は同じことを行うためにJNI呼び出しを探していますが、NativeCallはあなたの要件に非常にマッチしました。 –

+0

@Shailesh_BそうするためのJNI呼び出しはありません。それ以外の場合は、JNI仕様がリストされ、ネイティブWindows APIがない場合は実行できません。 – EJP

+0

@EJPはい、「リスクは、」私はそれのいずれかを理解していない暴露「シンプル」CのAPI –

関連する問題