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.

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();
		}
	}

}
OrkutTwitterGoogle BookmarksLinkedInDeliciousHotmailRedditWordPressGoogle ReaderFacebookDiggShare


Deixe um comentário