重複の可能性:
テキスト ファイルから特定の行を読み取る
Javaでファイルの行を読み取る方法はありますか?つまり、100行目だけを読みたい場合は、直接読み取ることができますか? または、100 行目までファイル全体を読み取る必要があります。
重複の可能性:
テキスト ファイルから特定の行を読み取る
Javaでファイルの行を読み取る方法はありますか?つまり、100行目だけを読みたい場合は、直接読み取ることができますか? または、100 行目までファイル全体を読み取る必要があります。
java.io.RandomAccessFile を使用できます。
100 行目に移動するには、次の行を使用します。
RandomAccessFile file = new RandomAccessFile("D:\\test.txt", "rw");
int totalLines = (int)file.length();
file.seek(100);
long pointer = file.getFilePointer();
for(int pt = 100; ct < totalLines; ct++){
byte b = file.readByte(); //read byte from the file
System.out.print((char)b); //convert byte into char
}
file.close();
詳細については、次のリンクを参照してください。 http://tutorials.jenkov.com/java-io/randomaccessfile.html
いいえ、抽象化に関係なく、ファイルシステムから100行目を「直接」読み取る効率的な方法は実際にはありません。もちろん、行ごとに固定長の行がある場合はオフセットを使用できますが(CRまたはLFなどを想定)、それだけです。「行」の抽象化に基づいてファイル内をジャンプすることはできません。
ほとんどの場合、ファイルの先頭から1行ずつ読み取る必要があります。
これには例外があります。
各行の開始位置を示すファイルのインデックスを作成して維持する場合は、インデックス内の行を検索してseek
から、ファイルをその位置まで検索して読み取ることができます。
ファイルが固定長の行で構成されている場合は、行の先頭の位置をとして計算してから、その位置まで計算できline_no * line_length
ますseek
。