問題タブ [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 - イベントが「繰り返される」とはどういう意味ですか?
の javadocs を読むと、イベントが結果によって繰り返されるかどうかWatchEvent
をcount()
メソッドが教えてくれることがわかります。
イベント数を返します。イベント数が 1 より大きい場合、これは繰り返されるイベントです。
それはどういう意味ですか?2 つ以上のWatchEvent
オブジェクトが同じ「イベント」 (作成中のファイルなど) を参照しているということですか?
私は新しい API の Oracle のサイトで例を試していますWatchService
が、特に同じテスト コードを連続して実行すると異なる数のイベントが発生するため、この部分は私を混乱させましたFileWriter
手動で)、しかし の結果がcount()
1 を超えることはありません。
編集:これは、繰り返されるイベントに関するこの他の質問に関連している可能性があることを認識していますが、イベントが繰り返されることが実際に何を意味するのかには答えていません。
java - 一部のフォルダで Java WatchService が機能しない
Java 7 WatchServiceを使用してフォルダーを監視したい/proc
のですが、うまくいきません (フォルダーで行われた変更は報告されません)。/home/user/Desktop
andなどの他のフォルダーをテストしましたが/tmp
、動作します。その理由は何ですか?権限のせいですか?/proc
明らかにルートが所有していますが、他のフォルダーはログインしているユーザーが所有しています。ただし、/tmp
これも root が所有していますが、機能します。この基本的な実装を使用してテストしています。
私のOSはUbuntu 13.10 64bitです。オラクル Java 1.7.0_51。
java - rsync を使用してファイルをディレクトリにコピーしているときに、Java Watch サービスは、実際のファイルではなく、OS から一時ファイル通知を受け取ります。
rsync を使用してファイルをコピーすると、OS はサービスを監視するために、実際のファイルではなく一時ファイルを通知します。
たとえば、以下は、拡張子「.ser」の後に何らかの文字が追加され、プレフィックス「.」が追加されたいくつかのファイル通知です。
以下の名前のファイルの予期される通知:
以下のコードのスナップショット、
cp、scp のように rsync なしでファイルをコピーすると、適切な通知が得られますが、rsync の場合、適切なファイル変更が得られません。rsync の問題は何ですか?
それについての考えを自由に共有してください。
rsync コマンド:
rsync -rtvz <source> <destination>
java - Java: WatchService は、コンテンツがコピーされる前に通知を受けます
非常に小さなファイルをコピーして、監視サービスによって監視されるフォルダーに貼り付けようとしました。初めてはうまくいきますが、その後のすべてのコピー&ペースト操作で、別のプロセスがすでにファイルを処理しているという例外が発生します。実験の結果、コンテンツがコピーされたときではなく、Windows がファイルを作成したときにサービスに通知されることがわかりました。ファイルをロックすると、Windows はデータをコピーできず、ファイルは空になります。一方、ファイルをディレクトリに移動すると、すべて正常に動作します。
それはWindowsのバグですか?Mac または Linux ワークステーションではテストできませんでした。あるいは、私が無能だっただけかもしれません。どんな助けでも大歓迎です。
私のコードは次のようになります。
java - Watching a Directory for Changes Java.nio.file
I know java.nio.file
could provide ways to watch file's change like new file ,modify and delete . but now I wonder if there's a way to watch if the directory is being entered or one file being opened by some app like a editor.
I've read the API docs, and could find no way to achieve this. Can anyone give a clue about this, maybe other API doc rather than java.nio.file
which could provide a way to work around this.
java - java.nio.file.StandardWatchEventKinds.OVERFLOW が発生したときに失われたイベントを取得するにはどうすればよいですか
を使用する Java アプリケーションを作成するのに忙しいですjava.nio.file.WatchService
。
イベントは正しくポーリングされ、処理されます。
次に電話したときに問題が発生しますwatchService.take()
イベントの処理中にさらにイベントが発生したため、最初のイベントのタイプはStandardWatchEventKinds.OVERFLOW
です。
これらのイベントを取得したり、イベントが失われないようにするにはどうすればよいですか? イベントを失わないことが重要です。
java - Windows 7 の Watchservice が機能しない
このコードは Linux では正常に機能しますが、Windows 7 では機能しません。ファイルの内容を更新するには、出力ファイルをクリックする必要があります。トリックはどこにありますか?
Windows 7 prof、NetBeans IDE 8.0 RC1 (ビルド 201402242200) を使用しており、バージョン NetBeans 8.0 Patch 1.1、JDK 1.8 に更新されています。
編集:要求に応じてコードを減らしました。
編集 2 : ファイル パス
編集 3:データの書き込みに使用しているメタトレーダー コード
編集 4:私の問題をよりよく示すためのスクリーンキャスト: 出力ファイルをクリックしたときにのみデータが更新される
java - WatchService WatchEvent .context() メソッドが、ENTRY_MODIFY でファイルの一貫性のない相対パスを返す (goutputstream-####、Linux OS)
このコードでは、特定のパスのコンテンツの最新バージョンで HashMap を更新し、文字列としての絶対パスをキーとして使用することを望んでいます。問題は、WatchEvent
の.context()
メソッドが、イベントごとに同じファイルに対して異なる相対パスを提供していることです。
コードのスニペットを次に示します。
b.txt
監視対象ディレクトリ内のファイルの内容を「abc」から「abc 123」に変更した場合の出力例を次に示します。
これはすべて、ファイル /workspaces/b.txt (既に存在する) を開いてその内容を変更するだけであることに注意してください。) :
気になるラインは
Path oldfilepath=path.resolve((Path)event.context());
oldfilepath
同じファイルが "/workspaces/.goutputstream-MFJ6HX" に解決され、その後 "/workspaces/.goutputstream-BRC1HX" に解決される方法に注意してください。
event.context()
変更するたびに、同じファイルに対して異なるパスを返しています。これは Linux の問題ですか、それとも Java の問題ですか? また、このファイルの標準相対パス (この場合は "b.txt") を正確に取得するにはどうすればよいですか?
変更を実行すると、一連の作成/変更/作成イベントを取得しているようですENTRY_CREATE
.sには正しいファイル名があり、ENTRY_MODIFY
sには一時ハンドルがあります(ファイルの一時バージョンを推測しています)ファイルの変更をキャプチャし、そのイベントから正しいファイル名を取得できるようにする必要があります。
ファイルを開いたり、変更したり、保存したりするときに、ファイルシステムが内部で一時ファイルの作成と処理を行っている可能性があることは理解していますが、イベントを示す一時ファイルから適切なファイル名を正確に抽出するにはどうすればよいENTRY_MODIFY
ですか? この変更に関連するイベントをグループ化して、囲みENTRY_CREATE
を見つけてそこからファイル名を取得できるようにする方法はありますか? または、どういうわけか、これにつながる呼び出しのスタックを上に移動しますENTRY_CREATE
か?
ENTRY_CREATE
各 を囲んでいる囲んでいるイベントでファイル名を見ることができますが、ENTRY_MODIFY
何とかするよりもこれを行うためのよりエレガントな方法があることを願っています (そうではなかった最新のイベントを取得しENTRY_MODIFY
、それから取得.context()
します。)
ありがとう!