Iniciar leitura de arquivo txt a partir de determinada linha

9 respostas
txtprogramaçãojava
V

Pessoal eu tenho um código que le um arquivo txt linha por linha e funciona bem assim, porém esse arquivo txt é alterado algumas vezes e dessa forma o tamanho dele pode ser alterado e ele se tornar bem grande … então eu não gostaria de continuar lendo linha a linha, eu gostaria de ler esse arquivo somente a partir da ultima linha que eu li anteriormente.

Exemplo:
A ultima linha que o código identificou foi a linha “linha1000” e depois de 10 minutos o código le o arquivo novamente e esse arquivo agora recebeu novas linhas, então eu quero começar a ler ele a partir de onde eu parei, a partir da “linha1000” …

Eu estou armazenando em uma variável o conteúdo da ultima linha, pensei em fazer um if para ele achar essa linha no arquivo … o que funcionaria para ler essa linha especifica, porém eu quero ler a partir dela todas as outras que estiverem abaixo … por favor se alguém puder me ajudar eu agradeceria muito, pois estou pesquisando muito e não estou encontrando uma solução.

9 Respostas

D

Vejo duas alternativas: após ler o conteúdo, excluir as linhas já lidas ou gravar o hash do nome do arquivo e a última linha lida, para que, na próxima leitura, descarte as linhas anteriores.

V

Certo, eu pensei nisso de excluir as linhas já lidas mas não encontrei maneira de fazer isso, e quanto a outra alternativa, você teria algum exemplo, ou link para eu entender melhor?

V

Vou deixar o trecho do meu código aonde eu faço a leitura do arquivo.

File arquivoR = new File("C:\\dayz\\log nitrado\\urss1.dayz.dev\\log.ADM"); //IDENTIFICA O ARQUIVO BAIXADO
	FileInputStream stream = new FileInputStream(arquivoR);
    InputStreamReader reader = new InputStreamReader(stream);
    br = new BufferedReader(reader);
    String linha = br.readLine();      
	while(linha != null) { //COMEÇA A LER LINHA A LINHA
	//aqui ele corre linha por linha do meu arquivo 
    }
D

Está usando qual versão do java?

V

Java version “1.8.0_181”

D

Com o java 8, você pode usar a leitura a partir da classe Files:

List<String> lines = Files.lines(Path.getFile("caminho\\para\\o\\arquivo.txt"));

Assim você já tem as linhas.
Com o nome do arquivo, você pode criar um hash (tem vários exemplos na internet) e gravar qual foi a última linha lida (lines.size(), por exemplo);

V

Você me recomenda que eu faça List lines por que exatamente?

e eu já estou capturando a ultima linha, isso só não foi exibido no trecho de código que mandei aqui, pois meus código esta bem extenso, mas eu já estou armazenando a ultima linha…vou pesquisar sobre o hash mas eu não sei exatamente o que ele faz, poderia apenas me dar uma explicação simplificada do que o hash pode fazer?

desde já obrigado pela atenção

D

Questão de praticidade, afinal, você não precisa de uma estrutura de repetição para ler as linhas. Mas, cada um no seu quadrado.

V

Eu preciso de uma estrutura de repetição para ler as linhas pois cada linha contem um conteúdo diferente, e eu preciso identificar esse conteúdo e quando identificar preciso tratar de uma forma, ou seja, eu checo se a linha contem tal palavra, frase ou formato e então se conter aquilo eu faço algo … e esse código fica rodando sem parar, quando ele termina ele descansa e depois volta automaticamente a trabalhar e é ai que esta o x da questão … toda vez que ele volta a trabalhar ele lê todas as linhas novamente e eu só queria que ele lesse a partir de onde ele parou … meu problema é simples mas a solução parece bem complexa…

Criado 7 de janeiro de 2020
Ultima resposta 7 de jan. de 2020
Respostas 9
Participantes 2