私はいくつかの同様の質問を読んだtail -f somefile
Javaファイルのテイラー実装
と同等ですjavaファイルウォッチャーを実装します。私はいくつかのオプションを見てきました。
BufferedReader
を使用して、基本的な考え方は、ファイルから読み取るためにバッファードリーダーを使用することです。 nullが返された場合は、数秒間スリープしてから無限ループを続行します。私はこれを少し試してみましたが、私の結果はあなたがファイルの最後まで読んでいる限り、getLine
メソッドはもはやあなたに更新を提供しません。このアプローチはまったく機能しますか?random access file
を使用します。読み込み操作を行うたびにランダムアクセスファイルを作成し、現在のファイルが長ければファイル長を履歴ファイルと比較し、最後にデルタ部分の読み込みと読み込みを行います。私はこれがうまくいくと確信していますが、新しいランダムアクセスファイルを毎回読み込んで開くと、より効率的なアプローチはありませんか?新しいJDKがバッファ付きファイルリーダーに
stream
APIを追加したのを見たことがあります。これは、末尾に追加された新しいコンテンツとは関係ありません。それは最初に与えられたものにのみ関連しています。私の質問は、このストリームのAPIは、tailer function
を考慮に入れて拡張することができますか?
質問:
は
BufferedReader
tail -f
を実装するために使用することができますか?私の場合、一度EOFを読むと、nullだけが返されます。tail -f
の実装にJDK8stream
を使用できますか?さらに効率的な実装ではなく、apache common libのようなファイルを繰り返し開いて開くのですか?
1と3がおそらく最も簡単で、本当にそれはあなたの選択です。なぜあなたはすべての人のための実装を見たことがありますか?最も魅力的なものを選んでください。個人的に私はグルーヴィーでそれをやった。 def text = new File( "tailFile.txt").text.split()などのファイル全体を読む - あなたが望む "text"から任意の行を選ぶことができます。非常にシンプルで、私は今までにメモリが足りなくなったら書き直します(これまでのところ、私は10GBのファイルをテーリングしていないからです) –
ps、あなたの質問はコマンドとして表現されています。選択肢の1つを選択するか、実装全体を教えてもらえますか? –
オプション1/3で述べたように@BillKは全く動作しますか?私の場合は、最後まで読み込んだ後、全く新しいコンテンツは返されません。 – zinking