1

Windows Vista で Java を使用して、ディレクトリの監視のようなものを作成しようとしています。そのため、このディレクトリが変更 (新規、名前変更、更新、または削除されたファイル) されるたびに、プロセスがトリガーされます。dirディレクトリで a を実行し、すべてのファイルを分析するループでこれを実行しようとしました。しかし、特にファイル数が増え始めると、これは非常に時間とメモリを消費します。それを行うためのより良い方法があるべきだと思います。

:これについてはSOに同様の質問がありますが、C#用です。

4

4 に答える 4

4

それを行うためのより良い方法があるべきだと思います。

おっしゃる通り、もっと良い方法があり、Java 7 でそれが実現するはずです。今後のWatchService APIを参照してください。

RCビルドを入手しないと、あなたが説明したことを実行する移植可能な方法があるかどうかわかりません.

于 2009-10-09T14:46:03.553 に答える
3

Java 7 とWatchServiceが待ちきれない場合は、次のようにする必要があります。

final File watched = new File("[path of directory to watch]");
long lastModified = watched.lastModified();
while(true) {
    if (watched.lastModified() > lastModified) {
        // Change happened in the directory do what you want.
    }
    Thread.sleep(2000); // 2 second interval
}
于 2009-10-09T14:51:55.490 に答える
1

おそらく JNI を使用して ReadDirectoryChangesW を呼び出す必要があります。代わりに FirstFirstChangeNotification と FindNextChangeNotification を使用できますが、古い (16 ビット) バージョンの Windows との互換性が必要でない限り、使用しないことをお勧めします。

于 2009-10-09T14:50:06.043 に答える
1

正確には何を監視していますか?ディレクトリの変更時間を監視し、ディレクトリが変更されている場合はファイルの変更時間を確認するだけでよいと思います。

したがって、ファイル名と変更時間の比較を保存することを期待しMapます(少なくともチェックのために)。

残念ながら、Java を使用してディレクトリの変更をチェックする簡単な方法は、ディレクトリをある程度ポーリングする以外にありません。私のwrtの以前の回答を参照してください。この質問とこれを簡素化するために使用できるライブラリ (および Java 7 機能)

于 2009-10-09T14:46:06.490 に答える