[RESOLVIDO] Ler arquivo .txt e mostrar no jTxtArea
20 respostasResolvido
java
Gabriel_Ramos2
Olá comunidade, sou novo em programação java. Estou tentando fazer uma aplicação que leia um arquivo .txt e ao abrir esse arquivo ele mostra no jTxtArea.
No Print, pelo compilador, mostra todo o conteudo do arquivo, mas ao tentar jogar no txtArea pega só a última linha, ajudem ai
publicvoidlerTXT(){Stringnome=(pasta);//System.out.printf("Conteúdo do arquivo texto:\n");try{FileReaderarq=newFileReader(nome);BufferedReaderlerArq=newBufferedReader(arq);Stringlinha=lerArq.readLine();// lê a primeira linha// a variável "linha" recebe o valor "null" quando o processo// de repetição atingir o final do arquivo textowhile(linha!=null){//System.out.printf("%s\n", linha);linha=lerArq.readLine();// lê da segunda até a última linha}arq.close();}catch(IOExceptione){System.err.printf("Erro na abertura do arquivo: %s.\n",e.getMessage());}System.out.println();}
rodriguesabner1 like
Aqui vc coloca sua jTextArea: jTextArea.setText(linha);
E aqui vc coloca o jTextArea.append(linha);
Mike2 likes
Você quase acertou
Você não esta concatenando o valor da variavel, esta sempre atribuindo um novo
O certo seria:
texto = texto + bis.readLine()+"\n";
Ou seja, o texto vai ter o VALOR ANTERIOR mais o NOVO VALOR
Gabriel_Ramos2
Obrigado @rodriguesabner e @Mike deu certo, coloquei a variável valendo texto=""; dai executou sem o null.
Gabriel_Ramos2
Tenho mais uma dúvida. Eu estou lendo um arquivo .txt com as seguintes informações:
Onde está em negrito no .txt seria correspondente ao ano. Tenho um jtxtField onde passarei o ano para o usuario digitar. Gostaria de criar um Botão “Atualizar” por exemplo, que ao clicar limpasse as linhas anteriores, ou criasse um novo texto dentro do jTextArea. Alguma ideia? rsrs
Mike1 like
Só usar setText, para setar o texto
Não entendeu muito bem ainda né?
seuTextArea.setText("");//Limpa o conteúdo do textArea seuTextArea.setText(“Novo texto”);//O textArea vai ter o valor: Novo Texto
Gabriel_Ramos2
Sim, até ai entendi, mas percorrer o arquivo e pegar só as linhas que possuem o ano de 2018 na linha… e jogar no jtxtArea que ta o problema
Gabriel_Ramos2
Resumindo o que estou querendo fazer.
Em um arquivo texto.txt por exemplo tenho os dados:
No caso queria pegar de um arquivo .txt os dados da linha que o usuario entrar, por exemplo, ao digitar 2018 mostrar a linha apenas que contenham o 2018. Ou ao digitar 4 ele mostrar todas as linhas pra frente a partir da linha 4, entenderam? rs
Achei um método de ler as linhas porém lê uma por vez…
publicvoidlimpar(){try{RandomAccessFileleitura=newRandomAccessFile(“texto.txt”,“r”);leitura.seek(4);// numero da linha a ser exibidaStringlinha=leitura.readLine();System.out.println(linha);jTextArea1.setText(linha);}catch(IOExceptione){e.printStackTrace();}}
Gabriel_Ramos2
No caso eu teria que fazer um contador dentro do leitura.seek(4); certo?
Você pode adicionar cada linha do arquivo em um array de String.
Depois de ler todo o arquivo, você ve qual o ano que vai querer.
Para verificar qual elemento do array tem o ano desejado, você terá que iterar e então usar o método contains da classe String para verificar se aquele elemento possui a palavra (no caso o ano) que você quer, se tiver, você adiciona esse elemento do array ao texto do textArea
assim ele está mostrando todos os resultados ainda.
Pelo que percebi a variavel nome está pegando tudo que está no txtArea e atribuindo a ela, não está pegando linha por linha…
Mike
Ainda não.
Leia o arquivo e adicione cada linha a um novo elemento do array ou ArrayList.
Depois de ter adicionado todas as linhas, itere sobre esse array ou ArrayList.
Isso esta razoalvelmente certo, posteriormente altere o “2018” por uma váriavel
Nó código que você postou, você adicionou o conteudo todo do textArea em um elemento do array, e isso é diferente do que eu sugeri
Gabriel_Ramos2
@Mike consegui fazer ler as linhas de 2018, porém só pelo System.out… Quando jogo no txtArea ele pega o ultimo valor
publicvoidlimpar(){List<String>texto=newArrayList();StringarquivoT="texto.txt";Filearquivo=newFile(arquivoT);try{BufferedReaderin=newBufferedReader(newFileReader(arquivo));Stringdados=null;while(in.ready()){dados=in.readLine();// aqui eu pego linha a linha do txttexto.add(dados);// aqui eu armazeno a linha do txt em um Listif(dados.contains("2018")){System.out.println("2018 = "+dados);// aqui mostra todosjTextArea1.setText(dados);// aqui mostra o ultimo valor}}in.close();}catch(IOExceptione){System.out.println(e);}}
Mike
Claro que só mostra o último, vc ta inserindo um novo valor. (Isso já foi comentado anteriormente).
Se você quer mostrar todas as ocorrências que possuem 2018, você deve concatenar o valor em uma variável e então dar o setText, ou no setText vc. usa o método getText e concatena com a variável dados.