4

多くのアプローチがあり、プログラムの作成を使用してUnixtailコマンドを呼び出すことができますが、これに伴う問題は、プロセスをテールがインストールされたUnixマシンにインストールする必要があることです。

もう1つのオプションは、ファイルを1行ずつ読み取り、行がなくなるまで読み取り、しばらくスリープしてから、次の行を読み取って繰り返すことです。

問題は、アクティブに書き込まれているファイルをポーリングする方法を教えてください。AFAIKは、ファイルが変更されたときに非同期通知を取得する方法がありません。これは低レベル(OSからのもの)であるためです。また、これをサポートするライブラリがないことも認識しています。

私は、ファイルの変更日にスリープ/ポーリングするのがより良いアプローチかもしれないと考えていました。

解決策はありますか?

4

4 に答える 4

5

Java 7を使用できる場合は、ファイルウォッチャーがあり、必要なものを実装できます。
ファイル通知

Java 6(およびそれ以前)の場合、Apache Commons VFS(File Monitor) libを使用して独自のファイルウォッチャーを作成する必要があります。

Java 7にアクセスできない場合、またはサードパーティのライブラリ(commonsやjnotifyなど)を使用できない場合は、ポーリングスレッドを使用して自分でファイルウォッチドッグを作成する必要があります。

于 2012-04-12T06:18:31.360 に答える
3

java nioのWatchServiceを使用して、ファイル/ディレクトリが変更された場合に非同期通知を受け取ることができます。このチュートリアルでは、その使用方法について説明します。

于 2013-02-27T20:55:40.417 に答える
1

これを単純化するためにできることは、ファイルのサイズをポーリングし、その量だけを読み取るスレッドを作成することです。つまり、そのように最後に到達することはありません。読み取られたこのデータはパイプに書き込むことができ、メインスレッドが連続パイプを読み取ることができます。

于 2012-04-12T07:24:12.247 に答える
0

答えはわかりません。たった2つのヒント
1.RandomAccessFileが役立つかもしれません。
2.これを行う別のオープンソースプログラムを見つけてみてください。(例えば、IntelliJ IDEAはまさにこれを行います)

于 2012-04-12T06:19:24.420 に答える