4

の javadocs を読むと、イベントが結果によって繰り返されるかどうかWatchEventcount()メソッドが教えてくれることがわかります。

イベント数を返します。イベント数が 1 より大きい場合、これは繰り返されるイベントです。

それはどういう意味ですか?2 つ以上のWatchEventオブジェクトが同じ「イベント」 (作成中のファイルなど) を参照しているということですか?

私は新しい API の Oracle のサイトでを試していますWatchServiceが、特に同じテスト コードを連続して実行すると異なる数のイベントが発生するため、この部分は私を混乱させましたFileWriter手動で)、しかし の結果がcount()1 を超えることはありません。

編集:これは、繰り返されるイベントに関するこの他の質問に関連している可能性があることを認識していますが、イベントが繰り返されることが実際に何を意味するのかには答えていません。

4

2 に答える 2

2

私はこれを実験するのにしばらく費やしましたが、これが私の結論です:

同じファイルに複数のタイプのイベントが発生した場合、ファイルfとイベント タイプのイベントが繰り返されます。eef

eタイプ イベントが複数のファイルf1f2、およびf3で発生したが、それぞれ 1 回だけ発生した場合、それらのイベントはいずれも繰り返されません。

からを取得すると.take()、イベントが発生したファイルごとに、発生したイベント タイプごとに が取得されます。最後に. _WatchKeyWatchServiceWatchEvent.count()WatchKeyWatchService

つまり、あるディレクトリを監視している場合A.txt、次のイベントが発生します。

  1. B.txtディレクトリに作成されます。
  2. B.txtに書かれています。
  3. A.txtに書かれています。
  4. B.txt削除されます。
  5. A.txtに再度書き込まれます。

あなたは4つを得るでしょうWatchEvents

  1. の作成イベントB.txt
  2. の変更イベントB.txt
  3. の変更イベントA.txt。2.count()となります。
  4. の削除イベントB.txt

これは、任意の時点でディレクトリにあったファイルの数である で、以上の3*nイベントを取得することは決してないことを意味します。WatchKeyn

で定義されているイベントは 4 種類ありますStandardWatchEventKindsが、OVERFLOWイベントはイベントが失われた可能性があることを示しているため、上記の番号から省略しました。

于 2014-02-28T15:32:09.603 に答える