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

}
  • Orkut
  • Twitter
  • Google Bookmarks
  • LinkedIn
  • Delicious
  • Hotmail
  • Reddit
  • WordPress
  • Google Reader
  • Facebook
  • Digg
  • Share/Bookmark


Deixe um comentário