ファイルに10行あるとしましょう。インデックスの開始と終了を指定する 2 つのパラメーターがあります。
StartIndex = 2 // 最初の 2 行を指定します
EndIndex = 3 // 最後の 3 行を指定します
間の行を読む必要があります。インデックスを維持し、スキップすることが方法の1つであることは知っています...しかし、他に効率的な方法はありますか(外部ライブラリを使用しても)?
ありがとう
最初の2行を読まずに、ファイルの3行目に直接ジャンプする方法があるかどうかを尋ねていると思います。一般的に(あなたが言ったように、あなたがインデックスを持っていない限り)答えはノーです。最初の2行を読んでそれらの長さを知る必要があるため、ファイルを1行ずつ読み取り、最初の行を無視するという単純な解決策は、可能な限り優れています。
終了に関しては、終了インデックスがファイルの先頭からのインデックスである場合は、早期に停止できます。しかし、ファイルの最後から3行目という意味ですか?この場合、いつ停止するかを知るために、ファイルの最後まで読む必要があります。
1つの特殊なケースは、すべての線が同じ長さであることがわかっている場合です。次に、ファイル内の正しい場所を直接探して、そこから読み取りを開始できます。
commons IO を使用すると簡単に実行できますが、ファイル全体をメモリにロードするため効率的ではありません。
File file = new File("myfile.txt");
List lines = FileUtils.readLines(file).subList(2,3);
他の人が指摘したように、ファイルの内容についてより多くの情報を知らない限り、いいえ、行がどこから始まるかを見つけるために実際に順番に読む必要があります。行番号を追跡するバッファリングされた文字入力ストリームであるLineNumberReaderを利用できます。