[Resolvido] = Erro BufferedReader preciso retorna o ponteiro do arquivo para o inicio

2 respostas
J

Bom dia !

pessoal preciso da ajuda de vocês

estou fazendo leitura de um arquivo usando o BufferedReader
até ai sem problema , porem preciso fazer isso duas vezes no mesmo metodo
porem quando chega no segundo leitor.readline() , o arquivo ja está no final.
pesquisei e existe alguns metodos para retorna o ponteiro com reset() e outros
porem em arquivos muito grandes estes metodos não são confiavei , se alguem souber de alguma coisa
ou alguma tecnica e poder me passar fico grato

att javaX

2 Respostas

W

O mark e reset não funcionam mesmo como deveriam. Melhor você fazer um reposicionamento direto pelo Channel do arquivo:

public static void main(String[] args) {

		FileInputStream fis = null;
		BufferedReader br = null;
		String linha = null;

		final String arquivo = "C://UmArquivoTexto.txt";
		
		try {
			fis = new FileInputStream(arquivo);
			br = new BufferedReader(new InputStreamReader(fis)); 
		} catch (FileNotFoundException e) {
			System.err.println(String.format("Não achou o arquivo: %s", arquivo));
			System.exit(0);
		}

		// Primeira leitura
		try {

			while ((linha = br.readLine()) != null) {
				System.out.println(linha);
			}

		} catch (IOException e) {
			System.err.println(String.format("Falha durante leitura do arquivo: %s. Erro: %s", arquivo, e.getMessage()));
			System.exit(0);
		}
		

		// Reposiciona diretamente o ponteiro do arquivo
		try {
			fis.getChannel().position(0);
		} catch (IOException e) {
			System.err.println(String.format("Falha reposicionar arquivo para byte 0: %s. Erro: %s", arquivo, e.getMessage()));
			System.exit(0);
		
		}

		// Criar novo leitor
		br = new BufferedReader(new InputStreamReader(fis)); 
		
		// Segunda leitura
		try {

			while ((linha = br.readLine()) != null) {
				System.out.println(linha);
			}

		} catch (IOException e) {
			System.err.println(String.format("Falha durante leitura do arquivo: %s. Erro: %s", arquivo, e.getMessage()));
			System.exit(0);
		}
		
		try {
			fis.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
		
	}

Se precisar fazer acesso randômico a um arquivo, veja o artigo:

J

Valeu mesmo wiliamps

Vou testar aqui obrigado pela atenção

Att JavaX

Criado 30 de setembro de 2012
Ultima resposta 30 de set. de 2012
Respostas 2
Participantes 2