7

ディレクトリウォッチャーであるjava7のすばらしい機能を見たところです。ディレクトリをポーリングせずに、ディレクトリ内で何かが変更されたときに通知します。

1.)ただし、ファイルシステムが変更イベントの登録をサポートしていない場合は、ポーリングにフォールバックすると表示されます。すべての一般的なLinuxおよびWindowsファイルシステム(extX、ntfs、reiserXXX、jsf、zfs)はこの機能をサポートしていますか?

2.)ディレクトリ内のファイルの名前を変更するのは、作成イベントですか、それとも変更イベントですか。それとも、1つは削除し、もう1つは作成しますか?1つのシステムでテストできますが、すべてのファイルシステムで同じになりますか?

4

2 に答える 2

2

WatchServiceについて話しているようです。

ENTRY_CREATEイベントの表現は、新しいファイルが作成された場合、またはファイルの名前がディレクトリに変更された場合に、新しいエントリが認識されることを示しています。ファイルの名前が変更されて同じディレクトリに残っている場合に発生するイベントの指定がありません。

この表現は、サービスがオペレーティングシステムに基づいているか、ポーリングに基づいているかは実装に依存することも示しています。これはJREによる実装だと思うので、特定のOSがそれをサポートしていることを知っていても、サービスがOSレベルの機能を使用したりポーリングに頼ったりすることを保証するものではありません。実際、このサービスは、ポーリングを使用しているか、OSレベルの機能を使用しているかを判断する方法をまったく提供していません。

APIが定義する操作も、リスナーのようには動作しません。WatchServiceは自動監視を行いますが、発生するイベントのリストを取得するには、サービスから表示されたイベントを手動で要求する必要があります。新しいイベントが存在するときに自動的に呼び出されるフックを提供していないようです。

于 2011-06-11T11:46:18.487 に答える
1

WindowsとLinuxでそれを試してみると、動作に多くの違いが見られます。したがって、Javaは、プラットフォームに依存しない一貫した抽象化を実際に提供しようとはしていません。気になるOSでアプリをテストする必要があります(まあ、2つしかありません)。

WatchServiceは、想像以上にひどいものです。あなたが本当にそれに飛び込むならば、欲求不満に備えてください。

于 2011-06-11T17:08:21.863 に答える