ディレクトリへの変更を監視するために Java 7 の WatchService を使用したいと考えています。
フォルダーをロックしようとしているようで、失敗すると例外がスローされますが、事前にロックする方法や既にロックされているかどうかを確認する方法は提供されていないようです。
ディレクトリが現在別のプロセスによって使用されているかどうかを知る必要があります。私はそれをロックしたりストリームを開いたりすることができないので (ディレクトリであるため)、それを変更しようとして失敗した場合はスリープするか、スリープで try/catch するよりもインテリジェントなものを探しています。
理想的には、利用可能になるまでブロッキング コールが必要です。
編集:フォルダーで FileLock を取得できないようです。フォルダをロックしようとすると、「FileNotFoundException (アクセスが拒否されました)」が発生します。グーグルは、ディレクトリでそのオブジェクトを使用できないことを示唆しています。
登録コード:
WatchService watchService = path.getFileSystem().newWatchService()
path.register(watchService,
StandardWatchEventKinds.ENTRY_CREATE,
StandardWatchEventKinds.ENTRY_MODIFY,
StandardWatchEventKinds.ENTRY_DELETE)
失敗したシナリオ:新規作成のため
にフォルダーをリッスンしているとしましょう。
その中にサブフォルダーが作成されている場合は、 の変更を聞きたいです。ただし、(Windows で) 新しいフォルダーを作成すると、名前が指定されるまで Windows がフォルダーをロックするため、これは失敗します。f
g
g
f
ありがとう