ディレクトリ内の変更を検出するためのコードをいくつか作成しましたC:/my_dir
。(私はこのリンクをたどります)
しかし、ウォッチャーもすべてのサブディレクトリで変更を検出する必要があります。
C:/my_dir/*
任意のアイデアのように?
ディレクトリ内の変更を検出するためのコードをいくつか作成しましたC:/my_dir
。(私はこのリンクをたどります)
しかし、ウォッチャーもすべてのサブディレクトリで変更を検出する必要があります。
C:/my_dir/*
任意のアイデアのように?
あなたが探しているのは再帰です。
ディレクトリ内の各サブディレクトリをウォークスルーする必要があります...擬似コード:
function iteratePath(File root, List<File> registerMe) {
if (root!= null && root.isDirectory()) {
registerMe.add(root);
for (File f : root.listFiles()) {
iteratePath(f, registerMe);
}
}
}
Watch Service APIでは、サブディレクトリごとに個別のウォッチを登録する必要があります。
ルートディレクトリの子だけを監視するのか、ルートディレクトリの下にあるディレクトリのツリー全体を監視するのかわかりません。
前者の場合はFiles.newDirectoryStream()
、ディレクトリのサブディレクトリを反復処理するために使用できます。
for (Path subDir : Files.newDirectoryStream(rootPath,
new DirectoryStream.Filter<Path>() {
@Override
public boolean accept(Path entry) throws IOException {
return Files.isDirectory(entry);
}
}) {
// add watcher
}
後者の場合は、Files.walkFileTree()
代わりにメソッドを使用できます。実際、これはあなたがリンクした例で彼らがしていることです。WatchDir.javaregisterAll()
のメソッドを見てください。
後で新しいサブディレクトリが表示された場合は、そのためのウォッチャーを追加することもできます。
ApacheCommonsIOライブラリのFileAlterationMonitorの使用を検討することをお勧めします。APIはかなり使いやすく、ここにいくつかの例があります。