ファイルシステム内でエントリを変更する際にエントリを更新したいメディアライブラリについて、私は 'new' java.nio file watching featuresthis exampleを使って試してください。
私は移動(名前を変更)または削除が、ここでは(まだ他のオペレーティングシステムを試していない)Windows7の上のフォルダを見ていたときに何が起こっているかで、ファイルが作成されているときに便利なイベントを取得するために期待していた。java.nioを使用してファイル変更時に作成/移動/削除イベントを発生させる
フォーマット:
は 【のthreadName] 2012-04-09 18 DEBUG:20:35.934 GroupNumber-コマンド:パス
のthreadName:同じGroupNumberで送信されたメッセージがされている:各ウォッチフォルダは異なるID
GroupNumberを有するそれ自身のスレッドで実行され同時に送信されます(通常..)
COMMAND:受信したコマンド
パス:受信したパス012代わりに、単一イベントを有する
Rename:
[Watch0] DEBUG 2012-04-09 18:20:35.934 2-ENTRY_DELETE: C:\tmp\tmp\test.avi
[Watch0] DEBUG 2012-04-09 18:20:35.935 2-ENTRY_CREATE: C:\tmp\tmp\test1.avi
[Watch0] DEBUG 2012-04-09 18:20:35.936 3-ENTRY_MODIFY: C:\tmp\tmp
[Watch0] DEBUG 2012-04-09 18:20:35.937 4-ENTRY_MODIFY: C:\tmp\tmp\test1.avi
[Watch4] DEBUG 2012-04-09 18:43:47.965 18-ENTRY_DELETE: F:\tmp\test.avi
[Watch4] DEBUG 2012-04-09 18:43:47.966 18-ENTRY_CREATE: F:\tmp\test1.avi
[Watch4] DEBUG 2012-04-09 18:43:47.967 19-ENTRY_MODIFY: F:\tmp\test1.avi
Create:
[Watch0] DEBUG 2012-04-09 18:22:02.055 5-ENTRY_CREATE: C:\tmp\test.avi
[Watch0] DEBUG 2012-04-09 18:22:02.066 6-ENTRY_MODIFY: C:\tmp\test.avi
[Watch0] DEBUG 2012-04-09 18:22:03.460 7-ENTRY_MODIFY: C:\tmp\test.avi
//Note the 1.4'' delay between the last two messages.
//This is the time required to actually copy the file
Move in same watch folder:
[Watch0] DEBUG 2012-04-09 18:18:42.395 0-ENTRY_DELETE: C:\tmp\test.avi
[Watch0] DEBUG 2012-04-09 18:18:42.396 0-ENTRY_MODIFY: C:\tmp\tmp
[Watch0] DEBUG 2012-04-09 18:18:42.396 1-ENTRY_CREATE: C:\tmp\tmp\test.avi
[Watch0] DEBUG 2012-04-09 18:18:42.396 1-ENTRY_MODIFY: C:\tmp\tmp\test.avi
Move to other watch folder on same drive:
[Watch1] DEBUG 2012-04-09 18:23:24.341 8-ENTRY_CREATE: C:\tmp2\test.avi
[Watch0] DEBUG 2012-04-09 18:23:24.341 8-ENTRY_DELETE: C:\tmp\test.avi
[Watch1] DEBUG 2012-04-09 18:23:24.342 10-ENTRY_MODIFY: C:\tmp2\test.avi
//The two 8 are lying. Both messages are being sent from different threads
//and the shared counter hasn't been incremented by any yet. The next entry has been
//incremented by two!
Move to other watch folder on different drive:
[Watch4] DEBUG 2012-04-09 18:25:42.324 11-ENTRY_CREATE: F:\tmp\test.avi
[Watch4] DEBUG 2012-04-09 18:25:42.338 12-ENTRY_MODIFY: F:\tmp\test.avi
[Watch4] DEBUG 2012-04-09 18:25:42.703 13-ENTRY_MODIFY: F:\tmp\test.avi
[Watch3] DEBUG 2012-04-09 18:25:49.433 14-ENTRY_DELETE: C:\tmp2\test.avi
//Note that the last delete message is being sent from another thread then the first ones.
//This is because the source and destination WatchDirs aren't the same
Delete:
[Watch9] DEBUG 2012-04-05 21:22:02.921 ENTRY_DELETE: C:\tmp\test (2011).mkv
は、解釈されなければならない「コマンド+パス」のセットがあります。例えば。削除は1つのコマンドで構成されますが、名前変更と「同じフォルダ内での移動」はdeleteコマンドで開始しますが、将来のコマンドで定義されます。さらに、複数のファイルは、例えば、並行して移動すると、何らかの方法でソートされなければならない異なる操作に属するコマンドのランダムなリストになります。
私が思い付くことができる最高のイベントは、別のスレッド(いくつかの時間を与えるために受信された後に受信した後、一瞬(1秒)をチェックしているときに、他のイベントが生成されている場合はエンキューと所属されているthis class、あります同じ「イベントグループ」へ)。
1つのファイルの名前を変更、移動、作成、または削除する場合に機能しますが、複数のファイルを並行してコピーしたり、ファイルのバッチをコピーしたりする場合はこれ以上機能しません。
私が必要とするものは既に実装されていますか(一般的な使用例のようです)。または、誰かがこの問題にすべてのケースをカバーするためにどのように接近するのかを知っていますか?
最終的には、windows、linux、およびosxで動作する必要があります。大きなファイルが作成されている間
ここ
[Watch0] DEBUG 2012-04-09 19:10:17.774 0-ENTRY_CREATE: C:\tmp\tmp\testlarge.avi
[Watch0] DEBUG 2012-04-09 19:10:17.825 0-ENTRY_MODIFY: C:\tmp\tmp\testlarge.avi
[Watch0] DEBUG 2012-04-09 19:10:17.826 1-ENTRY_MODIFY: C:\tmp\tmp
[Watch0] DEBUG 2012-04-09 19:12:09.516 2-ENTRY_DELETE: C:\tmp\tmp\testsmall.avi
[Watch0] DEBUG 2012-04-09 19:12:09.516 3-ENTRY_CREATE: C:\tmp\testsmall.avi
[Watch0] DEBUG 2012-04-09 19:12:09.517 3-ENTRY_MODIFY: C:\tmp\testsmall.avi
[Watch0] DEBUG 2012-04-09 19:12:09.521 4-ENTRY_MODIFY: C:\tmp\tmp
[Watch0] DEBUG 2012-04-09 19:14:13.025 5-ENTRY_MODIFY: C:\tmp\tmp\testlarge.avi
もサポートしなければならないより複雑な例では、小さなファイルが移動されています。
私は今フレームワークに含まれている関数を使用したいと思いますが、jnotifyは私が望むものとまったく同じように見えるので、より良いかもしれません。 – Philippe