1. ホーム
  2. java

unix/linuxの "tail -f "のJava IO実装。

2023-09-28 19:17:51

質問

Linux のコマンド "tail -f " の機能を実装するために、どのような技術やライブラリを使用すればよいのか悩んでいます。 私は本質的に、以下のようなアドオン/代替品を探しています。 java.io.FileReader . クライアントコードは次のようなものになります。

TailFileReader lft = new TailFileReader("application.log");
BufferedReader br = new BufferedReader(lft);
String line;
try {
  while (true) {
    line= br.readLine();
    // do something interesting with line
  }
} catch (IOException e) {
  // barf
}

不足しているのは TailFileReader . それは、追加された行と同様に、ファイルが開かれる前に存在するファイルの部分を読み取ることができるはずです。

どのように解決するのですか?

ファイルの読み取りを継続し、ファイルがさらに更新されるまで待機する機能は、コードで実現するのはそれほど難しくないはずです。ここにいくつかの疑似コードがあります。

BufferedReader br = new BufferedReader(...);
String line;
while (keepReading) {
    line = reader.readLine();
    if (line == null) {
        //wait until there is more of the file for us to read
        Thread.sleep(1000);
    }
    else {
        //do something interesting with the line
    }
}

この種の機能は、アプリケーションの他の部分に影響を与えないように、独自のスレッドに置きたいと思うでしょう。そのためには keepReading をセッターで公開し、メインクラスやアプリケーションの他の部分が他の頭痛の種を抱えることなく安全にスレッドをシャットダウンできるようにします。 stopReading() などを呼び出すだけで、他の頭痛の種を抱えることなく安全にスレッドを停止することができます。