[RESOLVIDO] Ler arquivo .txt e mostrar no jTxtArea
20 respostasResolvido
java
G
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();}
R
rodriguesabner1 like
Aqui vc coloca sua jTextArea: jTextArea.setText(linha);
E aqui vc coloca o jTextArea.append(linha);
M
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
G
Gabriel_Ramos2
Obrigado @rodriguesabner e @Mike deu certo, coloquei a variável valendo texto=""; dai executou sem o null.
G
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
M
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
G
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
G
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();}}
G
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…
M
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
G
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);}}
M
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.