2010-11-26 11 views
2

私は、これについての質問があるかどうかを調べるためには、しかし、そうではないように見ていました。私は現在、BufferedReaderを使ってテキストファイルを読み込んでいます。私の唯一の問題は、ファイルの最後の行だけを読みたいということです。 IE:ファイルに何かを10回書くと、10番目のエントリを取得したい。私は10行目までヒットするまで各行を読むループを簡単に実行することができましたが、ファイルが増え続けるので効率的な方法があるのだろうかと疑問に思っていました。Javaでテキストファイルの終わりまで効率的に取得する方法は?

可能であれば、私はむしろ外部パッケージを使用したくありません。

ありがとうございます!

+2

コードをボトルネックにする前に、コードを最適化しないでください。どのようにそれを行うことができ、それがどれくらいうまくいくかを説明するときにそれを行います。 – oherrala

答えて

4

100行を読むことはほとんど問題になりません。

それはは後方のテキストファイルを読み取ることが可能ですが、:

  • エンコーディングによっては、それは非常に難しいことができます。特に、さまざまな文字に対して可変幅を持ちますが、文字の開始位置が明白でないエンコーディング
  • 良いケースであっても、本当に、本当に醜いコードです。あなたは

など、行が始まるワークアウト、ファイルに後方スキップ維持する必要がありますが、それがどれだけ恐ろしい確認したい場合は、私はこの Stack Overflow questionでいくつかのコードを持っている - それは、C#でです、あなたはそれをかなり容易に理解できるはずです。うまくいけば、それをしないようにあなたを説得するのに十分です。

100,000行のファイルがあれば価値があるかもしれませんが、100?とんでもない。ファイル全体を読むだけです。

+0

ファイルを読み込むのに最も遅れているのは、ファイルをディスクから取り出すことです。 4K未満のファイルの場合、この時間に差はありません。 64K未満のファイルの場合、その違いに気付かないでしょう。 –

0

これを行う唯一の方法は、ファイルの長さがわかっていて、そうでないと思われる場合です。あなたはそれを反復するだけです。 100以上の行は、10行を超えるループにはそれほど時間がかかりません。あなたが100万行を持っていれば、おそらくデータベースなどに行きたいと思うでしょう。

0

使用できるクラスはFileChannelです。あなたが(あらゆる言語で)持つ問題は、行の正確な長さがわからない限り、最後の行を得るためにファイル内のどこに配置するのかわからないことです。あなたは合理的な行の長さを取得するのに十分なだけバックアップすることができますし、それを前方に検索します。

3

ファイルが間違っている可能性があります。テキストファイルはどこから来たのですか?どのようにデータベーステーブルに行を挿入するのですか?最後の行を見つけるのはかなり簡単で高速です。

+1

これは質問に答えることはできませんが、私はもっと同意できないので、投票に値するでしょう。 – BalusC

+0

ありがとう@BalusC。私は、頑固なものから何のものか、何を持っているのかには答えず、その代わりに_task_を達成する別の方法を提供するという意味ではありません。時には、私はあまりにも具体的な質問をします。私は幸運なことに、私に頼りに戻ってきてくれる人がいます。 –

関連する問題