問題タブ [watchservice]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - JAVA での WatchService の使用。サブディレクトリを同時に見ることはできますか?
Java では、WatchService を使用してディレクトリを監視します。
たとえば、/users/monitor を監視すると、WatchService は 1 つのディレクトリしか監視できません。
しかし、すべてのサブディレクトリを「同時に」見たい
どのようにコーディングできますか? T_T
- - - - - - - - - - - - - -コード - - - - - - - - - - - ----------
- - - - - - - - - - - - - -コード - - - - - - - - - - - ----------
java - Java NIO 監視サービスを使用して http リソースを監視する
Amazon S3 のディレクトリを監視して、このディレクトリに新しいファイルが追加されているかどうかを確認する必要があります。Java NIO Watch Service を使用してみましたが、正しく動作しません。提供された S3 のパスで次の構文を使用した場合:
次に、次のエラーが表示されます。
パスからプレフィックスを削除すると、file://次のエラーが生成されます。
「Line2」を変更するとPath path=Paths.get("https://abc/dir");、次のトレースが生成されます。
ここで何が間違っているのか、Java ウォッチ サービスを使用してこれらのような Web リソースを監視できるかどうか、または他のフレームワーク/API があるかどうかを教えてください。
ありがとう
java - Java WatchService ウォッチが終了していない
Linux Mint で Java ウォッチサービス (Java 8) を使用するアプリケーションに取り組んでいます。私が直面している興味深い問題の 1 つは、inotify ウォッチが不足していることです。
私はEclipseで開発していますが、動作は次のとおりです。
アプリが起動すると、ディレクトリ構造を再帰的に検索し、見つかった各ディレクトリを監視します。現在のテスト ケースでは、13,660 のパスを使用しています。私の最大値は 16384 に設定されています。
アプリを数回 (20 回以上) 停止して再起動すると、正常に機能しているように見えます。ただし、最終的には、監視の最大数に達したことを示す一連のシステム エラーが発生します。ただし、Eclipse を再起動すると、問題は解消されます。
当然のことながら、Watch Service はすべてのリソースを解放しているわけではありませんが、取得した 13,660 個のウォッチのうち、保持されているのはほんのわずか (100 個未満だと思います) だけです。Eclipse の Java インスタンスをシャットダウンして再起動しない限り、リリースされないようです。
これに対処するために、アプリケーションがシャットダウンしてウォッチ サービス タスクがキャンセルされたときに、ウォッチ サービスの close メソッドが呼び出されるようにしました。
私が別の方法で行っている唯一のことは、2 つの異なる目的のために 2 つの別個の監視サービスを実行していることです。複数の監視サービスを実行する必要はないと言われましたが、これが問題なのかもしれませんが、できれば監視サービスを 1 つだけ実行したくありません。
とはいえ、このバグの原因を特定する方法について何か考えや提案はありますか?
大規模なコード投稿についてお詫び申し上げます。これは私の WatchService クラスの実装です。
いくつかのメモ:
pathFinder は別のスレッドで実行され、単なるファイル ビジターです。ディレクトリ ツリーをたどって、見つかったすべてのディレクトリ / ファイルへのパスを返します。
Register は、変更が pathsChanged プロパティに (pathFinder の onSucceeded コールバックから) ポストされた場合にのみ呼び出されます。
pathsChanged プロパティは常に setAll() 呼び出しによって更新されます。これは最新の変更を投稿するだけであり、累積することを意図したものではありません。watchservice を超えて、他のクラスはこれらのプロパティをリッスンし、それに応じて応答します。
}
java - 多くのディレクトリでの WatchService のパフォーマンス
Java を使用して多数のディレクトリ (数十万) の変更をリッスンしたいのですがWatchService、監視対象のディレクトリの数が適切かどうかわかりません。
WatchServiceそのような数のディレクトリの経験がある人はいますか?
それが役立つ場合はWatchService、EXT4 ファイル システムを使用する CentOS 6.5 で使用されます。
ありがとう、ミカエル
java - File.exists() は smb2 ネットワーク共有で正確ではありません (WatchService を使用しますか?)
このドキュメントによると: http://technet.microsoft.com/en-us/library/ff686200%28v=ws.10%29.aspx File.exists() は smb2 ネットワーク共有では正確ではありません。レジスターの設定変更が出来ないので、なんとかしたいです。ドキュメントによると、ファイル システムから通知を取得するための API があります。WatchService は、この API の Java 実装であると想定しました。私は正しいですか?
jdk サンプルの WatchDir の例から始めて、それを少し取り除きました。ファイルがいつ作成され、いつ削除されるかを知る必要があるだけです (ファイルの変更は気にしません)。テストのために、新しいイベントがトリガーされたときに new File.exists() を追加しました。また、ファイルの存在もテストする別のスレッドを開始します。この分離されたスレッドを開始しないと、ファイルの存在はすぐに true を返します。余分なスレッドが開始されると、正確ではなくなります。アプリケーション全体と実行中のすべてのスレッドで、より正確な file.exists チェックが必要です。
テストのために、2 台の Windows 7 PC (Java 7 を実行) を使用しました (デフォルトで smb2 が有効になっています)。作業ディレクトリはリモート pc 上にある必要があり、ファイル test.txt はリモート pc (ネットワーク ドライブを使用するのではなく、pc 自体) に作成 (または別のフォルダーからコピー) する必要があります。
ここに私のテストコードがあります:
私のテストケースの出力は次のとおりです。
ご覧のとおり、ファイル test.txt が 9 行目に作成されています。watchService はそれを通知しています。しかし、実際にはアプリケーションはそれを使用できません: FileExistsThread は 20 行目でそれを認識しています (少なくとも 10 x 300 ミリ秒後)。
何か案は?
[編集]
私もこれを試しました:
このメソッドは、期待どおりに true を返します。しかし、その後もファイルを使用できません。私は実際に新しい FileInputStream( file ) を開きたいと思っています。これは FileNotFoundExeption をスローしますが、この fileExists() メソッドは true を返します。ここで、FileInputStream を開く前に、new File().exists() が true を返すまで待ちます。これは機能します。
ありがとう
java - Wathservice api を使用したディレクトリ監視
新しいフォルダーまたはファイルの特定のディレクトリを監視するユーティリティを作成しています。新しいフォルダーまたはファイルが追加されたら、それを他の場所にコピーする必要があります。Java ウォッチサービスを使用しているため、ディレクトリがディレクトリを監視し、ディレクトリが完全に書き込まれていないことを確認する方法(これを確認するためにRandomAccessFilesを使用したファイルの場合)ディレクトリをチェックするのに似たものはありますか