Imprimindo a apenass a ultima linha

Meu programa le apenas a ultima linha do arquivo, eu ja tentei de tudo varios codigos na internet e nada resolve, alguem saberia dizer o queta acontecendo aqui?

pedaço do codigo abaixo

try {
         FileInputStream arquivo = new FileInputStream("agenda.txt");
         InputStreamReader arqabrir = new InputStreamReader(arquivo);
         BufferedReader br = new BufferedReader(arqabrir);

         StringBuilder linhas = new StringBuilder();
            String linha = br.readLine();
            while(br.readLine() != ""){
                linhas.append(linha);
                telaAgenda.setText(linha);
                linha = br.readLine();
            }
            
         
        } catch (IOException ex) {
         Logger.getLogger(Contatos.class.getName()).log(Level.SEVERE, null, ex);  
        }

Veja se resolve:

...
String linha = null;
while((linha = br.readLine()) != null){
...
1 curtida

mesma coisa, ja nao sei mais o que fazer pra resolver
estou colocando dentro de um JTextArea tem algum problema? será que é por isso que ta acontecendo isso?

Como também estou mechendo com arquivos em java,
acabei de testar seu código e não encontrei nenhum erro,
consegui ler mais de 2000000 de linhas num arquivo longo.
Apenas comentei a linha // telaAgenda.setText(linha); e
Usei System.out.println ( linha );
Com certeza o erro está relacionado ao TextArea.
Vou testar agora usando um TextArea do JavaFX.

1 curtida

O setText não concatena texto ele substitui o texto, assim, após passar da última linha o texto será a última linha.
Adicione as linhas em um StringBuilder e só faça o setText quando tiver saído do laço.

1 curtida

como isso pode acontecer de o amigo de cima usou meu código e obteve sucesso em seu projeto? enfim vou fazer esse teste tbm, e se resolver volto aqui

Seu amigo deve ter feito assim:

telaAgenda.setText(telaAgenda.getText() + linha);

E você fez assim:

telaAgenda.setText(linha);

Usa o StringBuilder que será mais performático.

1 curtida

agora está lendo gudo porém sem nenhum espaço, apenas escrevendo em uma linha só

ah e acabei de nota outro problema, agora está lendo uma linha sim outra não

então consegui resolver por hora da seguinte forma:
como estava lendo apenas uma linha sim outra nao, na hora de armazenar eu armazenei com um " \n"
deu certo e ficou bom por enquanto.

ficou assim para quem quiser dar uma olhada:

FileInputStream arquivo = new FileInputStream("agenda.txt");
         InputStreamReader arqabrir = new InputStreamReader(arquivo);
         BufferedReader br = new BufferedReader(arqabrir);

         StringBuilder linhas = new StringBuilder();
         String linha = br.readLine();
            
            telaAgenda.setText("");
            while(br.readLine() != null){
                linhas.append(linha);
                telaAgenda.setText(telaAgenda.getText() + "\n" + linha);
                linha = br.readLine();
            }
            
         
        } catch (IOException ex) {
         Logger.getLogger(Contatos.class.getName()).log(Level.SEVERE, null, ex);  
        }

e na leitura eu coloquei assim:

try {
FileWriter arquivo = new FileWriter(“agenda.txt”, true);
PrintWriter escreva = new PrintWriter(arquivo);

     escreva.println("Nome: " + this.nome + "\n");
     escreva.println("Telefone: " + this.numero + "\n");
     escreva.println("Aniversario: " + this.niver + "\n");
     escreva.println("-----------------------------" + "\n");
     
     escreva.flush();
     escreva.close();
     arquivo.close();
 } catch (IOException ex) {
     Logger.getLogger(Contatos.class.getName()).log(Level.SEVERE, null, ex);
 }
    return ("Cadastro realizado com sucesso");
}

Você não está prestando atenção no código que escreveu, veja:

        String linha = br.readLine(); // aqui você leu uma linha e não fez nada com ela
        
        telaAgenda.setText("");
        while(br.readLine() != null) { // aqui você leu a linha seguinte e não fez nada com ela
            linhas.append(linha); // aqui você está adicionando a linha lida pela penúltima vez e adicionando num StringBuilder
          telaAgenda.setText(telaAgenda.getText() + "\n" + linha); // aqui tá setando o texto do textArea, ou seja, não tá usando o StringBuilder pra nada
            linha = br.readLine(); // aqui está lendo a linha seguinte
        }

Faça assim:

        StringBuilder linhas = new StringBuilder();
        String linha = null;
        while ( (linha = br.readLine()) != null ) {
            linhas.append(linha).append("\n");
        }
        telaAgenda.setText(linhas.toString().trim());
1 curtida

PERFEITO! muito obrigada mesmo! Ajudou muito com essa duvida!
agora como eu faço caso eu quisesse pesquisar uma palavra dentro desse arquivo?
ou excluir parte dele?
valeu cara, ajudou demais mesmo.
nao sei como agradecer :slight_smile:

Jogue o texto do TextArea para uma variável do tipo String e aí você pode procurar nessa String.
Veja a documentação da classe String.