[RESOLVIDO] Ler arquivo .txt e mostrar no jTxtArea

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 :slight_smile:

Segue o código:

public void buscar(){
FileNameExtensionFilter fileNameExtensionFilter = new FileNameExtensionFilter(
“txt”, “txt”);
JFileChooser fc = new JFileChooser();
fc.setFileFilter(fileNameExtensionFilter);
fc.setDialogTitle(“Escolha o arquivo”);
int resposta = fc.showOpenDialog(null);

if(resposta == JFileChooser.APPROVE_OPTION){
    File file = new File(fc.getSelectedFile().getAbsolutePath());
    FileReader fis;
   try {
   fis = new FileReader(file);
    BufferedReader bis = new BufferedReader(fis);
    
        while(bis.ready()){
            //System.out.println(bis.readLine()+"\n");
            jTextArea1.setText(bis.readLine()+"\n");
        }
        bis.close();
        fis.close();
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e){
        e.printStackTrace();
    }
    
}

}

A cada iteração, você esta esta sobrescrevendo o valor do textArea ao invés de armazenar o valor por completo.

Você tem que armazenar o valor da linha em uma variável e então quando o while acabar, você passa o valor pro textArea.

1 curtida

Tentei assim:

String texto;
coloquei dentro do while
while(bis.ready()){
texto=bis.readLine()+"\n";
}
jTextArea1.setText(texto);

mas mesmo assim pega a ultima

public void lerTXT() {

    String nome = (pasta);
    //System.out.printf("Conteúdo do arquivo texto:\n");
    try {
        FileReader arq = new FileReader(nome);
        BufferedReader lerArq = new BufferedReader(arq);
        String linha = 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 texto
        while (linha != null) {
            //System.out.printf("%s\n", linha);
            linha = lerArq.readLine(); // lê da segunda até a última linha
        }
        arq.close();
    } catch (IOException e) {
        System.err.printf("Erro na abertura do arquivo: %s.\n", e.getMessage());
    }
    System.out.println();
}
1 curtida

Aqui vc coloca sua jTextArea: jTextArea.setText(linha);

E aqui vc coloca o jTextArea.append(linha);

1 curtida

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

2 curtidas

Obrigado @rodriguesabner e @Mike deu certo, coloquei a variável valendo texto=""; dai executou sem o null.

Tenho mais uma dúvida. Eu estou lendo um arquivo .txt com as seguintes informações:

0000003043011220150615013848293314
0000003043011220160615013848293314
0000003043011220170615013848293314
0000003043011220180615013848293314
0000003043011220180615013848293314

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

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

1 curtida

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

Resumindo o que estou querendo fazer.
Em um arquivo texto.txt por exemplo tenho os dados:

0000003043011220150615013848293314
0000003043011220160615013848293314
0000003043011220170615013848293314
0000003043011220180615013848293314
0000003043011220180615013848293314

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…

public void limpar()
{
try{
RandomAccessFile leitura = new RandomAccessFile(“texto.txt”,“r”);
leitura.seek(4); // numero da linha a ser exibida
String linha = leitura.readLine();
System.out.println(linha);
jTextArea1.setText(linha);
}
catch(IOException e)
{
e.printStackTrace();
}
}

No caso eu teria que fazer um contador dentro do leitura.seek(4); certo?

for(i=0;i<10;i++){
linha = leitura.readLine();
leitura.seek(i);
System.out.print(linha+"\n");
}

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

Entendi, seria algo assim?

public void limpar(){
String nome[] = new String [1];
for(int i=0;i<1;i++){
nome[i]=jTextArea1.getText();
if(nome[i].contains(“2018”)){
System.out.println(nome[i]);
}
}
}

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…

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 :+1:

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

@Mike consegui fazer ler as linhas de 2018, porém só pelo System.out… Quando jogo no txtArea ele pega o ultimo valor

public void limpar(){
    List<String> texto = new ArrayList();
    String arquivoT = "texto.txt";
    File arquivo = new File(arquivoT);
            try {
                BufferedReader in = new BufferedReader(new FileReader(arquivo));
                String dados=null;
                while (in.ready()) {
                    dados = in.readLine(); // aqui eu pego linha a linha do txt
                    texto.add(dados); // aqui eu armazeno a linha do txt em um List
                    if(dados.contains("2018")){
                    System.out.println("2018 = "+dados);// aqui mostra todos
                    jTextArea1.setText(dados);// aqui mostra o ultimo valor
                }
                }
                in.close();
            }catch (IOException e){
                System.out.println(e);
            }    
}

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.

Conseguiu resolver Gabriel?

Ainda não @rodriguesabner

no TextArea vc tem que jogar o jTextArea.append(oqvcquiser);

1 curtida