25

ファイル システムの変更を通知してくれる Java ライブラリを探しています。

無料のライブラリをいくつか見つけましたが、それらはすべてブルート フォース検出、つまり定期的なポーリングを使用しています。そして、他のものは常に商業的です。

私が探しているのは、OS のファイル監視機能を使用するライブラリです。つまり 、Win32 のFindFirstChangeNotification、LinuxのFAMなど、他の OS で利用できるものは何でも使用できます。ブルートフォースがフォールバックとして使用されてもかまいませんが、Windows と Linux では利用可能な OS 機能を使用する必要があります。

4

5 に答える 5

25

JNotifyは、必要なことを行うようです。

ファイルシステム (たとえば、更新時間の変更のためのディレクトリ) をポーリングしても、システムに大きな負荷がかかることはなく、軽視すべきではありません。Tomcat などのアプリは、ほとんど問題なくホット デプロイを管理するためにこれを使用します。

今はあまり役に立ちませんが、次期 Java 7 にはまさにこのためのWatchServiceがあります。

于 2009-07-08T08:44:29.827 に答える
7

Java の最前線での作業に慣れている場合は、 Java 7で予定されているJSR 203: More New I/O APIs aka nio2 をご覧ください。

ファイル属性への一括アクセス、変更通知、ファイル システム固有の API へのエスケープ、およびプラグ可能なファイル システム実装用のサービス プロバイダー インターフェースをサポートする新しいファイル システム インターフェース。

于 2009-07-08T08:50:38.100 に答える
6

jpathwatchは別のオプションです。ディレクトリ監視用に Java 7 の API を実装しているため、必要に応じて Java 7 に簡単に移植できます。

于 2010-07-01T06:13:43.103 に答える
4

なぜJavaでなければならないのですか?

プラットフォーム固有のAPIを使用するライブラリにはネイティブコードが必要であるため、基本的にライブラリは、さまざまなAPIの使用を透過的にするネイティブコードのラッパーになります。

ライブラリが自分で見つからない場合は、呼び出すときにブルートフォースを使用するか、プラットフォームごとにJNIを使​​用してネイティブAPIを呼び出す必要があります。

于 2009-07-08T06:40:39.297 に答える
0

現在ポーリングを使用している 2 つのオプション:

ただし、両方のプロジェクトには大規模なアクティブなコミュニティがあるため、将来的に更新されて Java 7 WatchService ( FileSystem.newWatchService() ) をサポートする可能性があります。これ、基盤となるプラットフォームの通知機能があればそれを使用します。

どちらのライブラリも、他のさまざまなトランスポートやシステムと統合するための便利な抽象化レイヤーを提供するため、メインのアプリケーション コードは、ファイル システムから受信する入力に依存しません。

于 2012-08-23T15:29:47.233 に答える