[Resolvido] = Erro BufferedReader preciso retorna o ponteiro do arquivo para o inicio
2 respostas
J
JavaX_JavaX
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
O mark e reset não funcionam mesmo como deveriam. Melhor você fazer um reposicionamento direto pelo Channel do arquivo:
publicstaticvoidmain(String[]args){FileInputStreamfis=null;BufferedReaderbr=null;Stringlinha=null;finalStringarquivo="C://UmArquivoTexto.txt";try{fis=newFileInputStream(arquivo);br=newBufferedReader(newInputStreamReader(fis));}catch(FileNotFoundExceptione){System.err.println(String.format("Não achou o arquivo: %s",arquivo));System.exit(0);}// Primeira leituratry{while((linha=br.readLine())!=null){System.out.println(linha);}}catch(IOExceptione){System.err.println(String.format("Falha durante leitura do arquivo: %s. Erro: %s",arquivo,e.getMessage()));System.exit(0);}// Reposiciona diretamente o ponteiro do arquivotry{fis.getChannel().position(0);}catch(IOExceptione){System.err.println(String.format("Falha reposicionar arquivo para byte 0: %s. Erro: %s",arquivo,e.getMessage()));System.exit(0);}// Criar novo leitorbr=newBufferedReader(newInputStreamReader(fis));// Segunda leituratry{while((linha=br.readLine())!=null){System.out.println(linha);}}catch(IOExceptione){System.err.println(String.format("Falha durante leitura do arquivo: %s. Erro: %s",arquivo,e.getMessage()));System.exit(0);}try{fis.close();}catch(IOExceptione){e.printStackTrace();}}
Se precisar fazer acesso randômico a um arquivo, veja o artigo: