Olá!
Para ler um arquivo texto apartir de um ponto utilize o RandomAccessFile, esta classe possui o método seek() que permite posicionar o cursor em um determinado ponto do arquivo antes de começar a leitura linha-a-linha.
No exemplo abaixo, o método gerarArquivoGigante() cria um arquivo de 96MB e o método main() lê apenas os últimos 521KB desse arquivo.
[sourcecode lang=”java”]
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.RandomAccessFile;
public class LeitorArquivo {
public static void main(String[] args) {
// Inicia a leitura do arquivo
File file = new File(“D:\\ArquivoGigante.txt”);
try {
// Abre o arquivo em modo de leitura apenas
RandomAccessFile raf = new RandomAccessFile(file, “r”);
String linha = null;
// Lê apenas os 512KB do final do arquivo
raf.seek(raf.length() – 1024 * 512);
while ((linha = raf.readLine()) != null) {
// Mostra as linhas no console
System.out.println(linha);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
/*
* Gera um arquivo gigante (96,3MB)
*/
public static void gerarArquivoGigante() {
File file = new File(“D:\\ArquivoGigante.txt”);
try {
FileOutputStream fos = new FileOutputStream(file);
String linha = “ABCDEFGHACMNSHTYUEILOKJHSNMALOQPLOASGTEBH” +
“YNSDFGJMKLAKSJDQOEWIAAANNSJS”
+”JHGQYAUSKDOEPPKLKJHHGFQWERTYUJ”
+ System.getProperty(“line.separator”);
for (int idx = 0; idx < 1000000; idx++)
fos.write(linha.getBytes());
fos.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
[/sourcecode]