Criando e Lendo arquivos Texto em Java

Olá pessoal…

Hoje irei mostrar como criar e ler arquivos texto em java, ou seja, criando e lendo arquivos .txt em Java, e também mostrarei uma forma fácil de ler e criar arquivos .xml.


Pessoal, a manipulação de arquivos texto em java, é simples, porém em alguns casos trabalhosa para o objetivo que deseja alcançar, abaixo um exemplo simples de manipulação de arquivos… Vale ressaltar pessoal, que arquivos, quando não passados diretórios (ex.: ‘teste.txt), ele busca na mesma pasta de execução do programa .java, agora se passar um diretório simples (ex.: ‘arquivos/teste.txt’), na raíz do programa .java, ele vai procurar o diretório arquivos e tentar abrir o arquivo texto, ou você pode passar o diretório absoluto (ex.: ‘/home/usuario/Trabalho/arquivo.txt’ ou ‘c:/Trabalho/arquivo.txt’).
Ah e a classe swing, foi usada para mostrar mensagens gráficas ao usuário.
A Biblioteca Formatter serve para formatar arquivos texto (criar, recriar, alterar).
A Biblioteca File, fornece também a função File, que pode verificar se existe o arquivo, ou até mesmo pegar o tamanho do arquivo, renomear, etc.
As funções de FileReader e BufferedReader, servem para ler o conteúdo de arquivos texto, porém uma apenas abre o arquivo para leitura (FileReader), enquanto a outra, percorre o arquivo, armazenando o valor, semelhante a ponteiros (BufferedReader), lembrando que o Buffer só chega ao fim do arquivo se for ‘null’. E para se usar as duas, deve-se usar dentro de um try (tente), pois não é sempre que o arquivo é liberado para leitura.

#> Arquivos Texto (*.txt):
Conteúdo do arquivo texto:

“TI não é para os nerds, é para os persistentes! – Luis Silveira, 2013

Para se dar bem na prova, não basta colar, tem que entender! – Ramsés Yshizuka, 2013

If (Media < 6) { alunoRetido(); retProxSemestre(); } – Matheus Serafim, 2013″

$> Ler arquivo .txt:

import javax.swing.*;
import java.io.*;
/*  //ou usar lib por lib
import java.io.File;
import java.io.FileReader;
import java.io.BufferedReader;*/

public class leTxt{

  public static void main(String[] args){
    String mostra="";
    String nomeArq="arquivo.txt"; //Nome do arquivo, pode ser absoluto, ou pastas /dir/teste.txt
    String linha="";
    File arq = new File(nomeArq);

    //Arquivo existe
    if (arq.exists()){
      mostra="Arquivo - '"+nomeArq+"', aberto com sucesso!\n";
      mostra+="Tamanho do arquivo "+Long.toString(arq.length())+"\n";
      //tentando ler arquivo
      try{
        mostra+="Conteudo:\n";
        //abrindo arquivo para leitura
        FileReader reader = new FileReader(nomeArq);
        //leitor do arquivo
        BufferedReader leitor = new BufferedReader(reader);
        while(true){
          linha=leitor.readLine();
          if(linha==null)
            break;
          mostra+=linha+"\n";
        }
      }
      catch(Exception erro) {}
      JOptionPane.showMessageDialog(null,mostra,"Arquivo...",1);
    }
    //Se nao existir
    else
      JOptionPane.showMessageDialog(null,"Arquivo nao existe!","Erro",0);
  }
}
Lendo arquivo Texto com Java

Lendo arquivo Texto com Java

$> Criar arquivo .txt:

import javax.swing.*;
import java.util.Formatter; //formatar arquivo

public class criaTxt{

  public static void main(String[] args){
    String nomeArq="gerado.txt";
    //tentando criar arquivo
    try
    {
      Formatter saida = new Formatter(nomeArq);
      saida.format("Arquivo gerado automaticamente!\n\n...www.terminaldeinformacao.com...");
      saida.close();
      JOptionPane.showMessageDialog(null,"Arquivo '"+nomeArq+"' criado!","Arquivo",1);
    }
    //mostrando erro em caso se nao for possivel gerar arquivo
    catch(Exception erro){
      JOptionPane.showMessageDialog(null,"Arquivo nao pode ser gerado!","Erro",0);
    }
  }
}
Criando arquivo Texto com Java

Criando arquivo Texto com Java

#> Arquivos XML (*.xml):
Conteúdo do arquivo xml:

“<?xml version=’1.0′ encoding=’ISO-8859-1′ ?>
<cadastros>
<pessoa>
<nome>Daniel</nome>
<idade>19</idade>
</pessoa>
<pessoa>
<nome>Math</nome>
<idade>18</idade>
</pessoa>
<pessoa>
<nome>Chuck</nome>
<idade>25</idade>
</pessoa>
</cadastros>”

$> Ler arquivo .xml:

import javax.swing.*;
import java.io.*;
/*  //ou usar as libs separadas
import java.io.File;
import java.io.FileReader;
import java.io.BufferedReader;*/

public class leXML{

  public static void main(String[] args){
    String mostra="";
    String nomeArq="nomes.xml"; //Nome do arquivo, pode ser absoluto, ou pastas /dir/teste.txt
    String linha="";
    String nome, idade;
    File arq = new File(nomeArq);

    //Arquivo existe
    if (arq.exists()){
      mostra="Arquivo - '"+nomeArq+"', aberto com sucesso!\n";
      mostra+="Tamanho do arquivo "+Long.toString(arq.length())+"\n";
      //tentando ler arquivo
      try{
        mostra+="Conteudo:\n";
        //abrindo arquivo para leitura
        FileReader reader = new FileReader(nomeArq);
        //leitor do arquivo texto (ponteiro)
        BufferedReader leitor = new BufferedReader(reader);
        mostra+="Nome - Idade\n";
        leitor.readLine(); //<xml
        leitor.readLine(); //<cadastro
        while(true){
          leitor.readLine(); //<pessoa
          nome=leitor.readLine();
          if(nome==null)
            break;
          idade=leitor.readLine(); //</pessoa
          //Para pegar entre as Tags, foi preciso criar uma lógica para quebrar a String
          nome=nome.substring(nome.indexOf(">")+1, nome.indexOf("/")-1); //pegando entre as tags
          idade=idade.substring(idade.indexOf(">")+1, idade.indexOf("/")-1); //pegando entre as tags
          mostra+=nome+"-"+idade+"\n";
          leitor.readLine();
        }
      }
      catch(Exception erro) {}
      JOptionPane.showMessageDialog(null,mostra,"Arquivo...",1);
    }
    //Se nao existir
    else
      JOptionPane.showMessageDialog(null,"Arquivo nao existe!","Erro",0);
  }
}
Lendo XML com Java

Lendo XML com Java

$> Criar arquivo .xml:

import javax.swing.*;
import java.util.Formatter; //para formatar arquivo

public class criaXML{

  public static void main(String[] args){
    String nomeArq="gerado.xml";
    String texto="";
    //tentando criar arquivo
    try
    {
      Formatter saida = new Formatter(nomeArq);
      texto="<?xml version='1.0' encoding='ISO-8859-1' ?>\n"+
          "<cadastros>\n";
      for (int indice=1; indice<=5; indice++){
        "  <aluno>\n";
        "    <matricula>0000"+
        Integer.toString(indice)+"</matricula>\n";
        "  </aluno>\n";
      }
      "</cadastros>";
      saida.format(texto);
      saida.close();
      JOptionPane.showMessageDialog(null,"Arquivo '"+nomeArq+"' criado!","Arquivo",1);
    }
    //mostrando erro em caso se nao for possivel gerar arquivo
    catch(Exception erro){
      JOptionPane.showMessageDialog(null,"Arquivo nao pode ser gerado!","Erro",0);
    }
  }

}
Criando XML com Java

Criando XML com Java

Bom pessoal, por hoje é só.
Abraços e até a próxima.

Dan (Daniel Atilio)
Cristão de ramificação protestante. Especialista em Engenharia de Software pela FIB, graduado em Banco de Dados pela FATEC Bauru e técnico em informática pelo CTI da Unesp. Entusiasta de soluções Open Source e blogueiro nas horas vagas. Autor e mantenedor do portal Terminal de Informação.

40 Responses

  1. Franchesco disse:

    Bah, Valeu mesmo, me ajudou bastante, belo trabalho…

  2. Osvaldo Aurélio disse:

    rsrs véi na boa, nao li isso aí nao kkkkkkkkkkkkkkk
    um dia pretendo ler kkkkkkk mas ainda ta meio grego, mas um dia eu volto rsrsrs

    preciso aprender isso, parece tão legal rsrs

    • Dan_Atilio disse:

      Rsrs…
      Grego nada ow, é só Java, rs…
      Quando eu estava começando a aprender Java, num entendia nada e era tudo muito confuso, hoje já sei me virar um pouco, rs…
      Abraços.

      • [C]haybe disse:

        Dá uma ajudinha? Sei que o post é antigo kk
        Mas eu gostaria de saber como eu altero o local onde vou salvar o arquivo…

        • [C]haybe disse:

          E como capturo campo específico? D:
          Exemplo:
          Opção 1
          Opção 2

          Como eu coloco em uma JLabel essa opção 1 e em outra JLabel, essa Opção 2 ?

        • Dan_Atilio disse:

          Boa noite Chaybe.
          Não entendi muito bem sua dúvida.
          Para capturar algo de algum campo, tem que se usar o JTextField, e o método é o getText():

          sAux = jtDir.getText().trim();

          Onde o trim retira os espaços em branco e o jtDir é o nome do seu JTextField.
          Abraços.

        • Dan_Atilio disse:

          Boa noite Chaybe.
          Pelo JFormatter:

          Formatter fSaida = new Formatter(sNomeArq);

          Onde sNomeArq é o caminho e o arquivo com a extensão que será gerado.
          Abraços.

  3. Ian Santos disse:

    Será que seria possível disponibilizar pasta compactada do sistema acima??? Estou tendo dificuldade. Sempre dá arquivo inexistente.

  4. kelvyn disse:

    Olha eu estou fazendo Técnico em informática, e consegui resolver o meu trabalho a partir do código, muito bom, valeu mesmo.

  5. Bruno disse:

    Excelente tutorial.

  6. victor disse:

    Estou colocando o n mas não esta pulando a linha

  7. Bruno Florentino disse:

    Tenho uma duvida. Eu fiz um código simples que pede para o usuário informar somente o nome e este nome é guardado em um arquivo txt. O problema é que se eu rodo o código varias vezes os nomes são substituídos ao invés de se criar mais um arquivo. Tem como resolver isso?

    • Dan_Atilio disse:

      Boa noite Bruno.
      O que pode ser feito, é a cada vez que for gerar o arquivo, reler tudo e adicionar o texto.
      Agora se quiser criar outros arquivos, solicite ou para o usuário informar o nome do arquivo, ou faça um laço e defina o nome do arquivo conforme se ele existir ou não.
      Abração e boa sorte.

  8. Antgenio disse:

    Irmão eu sou estudante Angolano e Pretendo muito da tua ajuda, pretendo ciar um jogo de força e que eu estou a ter grandes dificuldades com a manipulação de vectores e com a leitura de arquivos de texto que vão ser selecionada para adivinhar a palavra correta! não sei se me expliquei bem…

    • Dan_Atilio disse:

      Boa tarde Antgenio.
      É possível você fazer um xml, ou um arquivo texto comum, e deixar todos os dados em uma lista encadeada em java.
      Logo após isso, faça uma String auxiliar, que terá a palavra atual, e uma que ficará escondida, quando o usuário digitar uma letra, faça um For percorrendo o tamanho da String, e se tiver repetida em alguma posição, é só mostrar para o usuário.
      Abraços e qualquer dúvida, pode falar.

  9. angelo Máximo disse:

    Mestre como faço para colocar um laço for dentro do programa? Quero que no arquivo de texto seja inserido 1,2,3,4 e 5.
    Depois preciso criar outro arquivo de texto que leia o primeiro, porém os números precisam ficar na posição inversa.

    • Dan_Atilio disse:

      Boa tarde Angelo.
      Com os exemplos criados, você pode, criar uma variável string por exemplo, e ir adicionando os número em um for.
      Depois disso, basta criar o arguivo.
      Quanto ao segundo exercício, basta ler o arquivo e ir guardando o conteúdo em uma string de traz para frente, por exemplo:

      texto = leitor.readLine() + "\n" + texto;
      

      Espero ter ajudado.
      Um grande abraço.

  10. Olivia disse:

    Bom dia, como faço para ler um arquivo de texto e apresentar em modo consola e não no jPanel? e a seguir quero capturar os dados lido do ficheiro txt.
    Linha1
    Linha2
    Arrayde linhas.
    e depois utilizar no meu codigo

    como por exemplo
    nome
    password
    listaEstados(GO,MT,RJ,etc)

    no meu codigo vou ter
    nomePessoa = Nome;
    PasswordPessoa = password;
    estados[] = listaEstados;

    • Dan_Atilio disse:

      Boa tarde Olivia, tudo bem?
      Preparei um exemplo, funcionando inteiramente em modo console, que segue abaixo. Agora quanto a lógica das linhas, analise a linha 31, que é onde mostro a linha lida, e faça o tratamento necessário para armazenar nas suas variáveis.

      import javax.swing.*;
      import java.io.*;
      import java.util.Scanner;
        
      public class leTxt{
        
        public static void main(String[] args){
          String nomeArq="";
          String linha="";
      	Scanner sLer = new Scanner(System.in);
      	
      	//Pegando o arquivo
      	System.out.printf("Insira o arquivo: ");
      	nomeArq = sLer.nextLine();
      	
      	//Abrindo o arquivo
          File arq = new File(nomeArq);
        
          //Arquivo existe
          if (arq.exists()){
            //tentando ler arquivo
            try{
              //abrindo arquivo para leitura
              FileReader reader = new FileReader(nomeArq);
              //leitor do arquivo
              BufferedReader leitor = new BufferedReader(reader);
              while(true){
                linha=leitor.readLine();
                if(linha==null)
                  break;
                System.out.println(linha);
              }
            }
            catch(Exception erro) {}
          }
          //Se nao existir
          else
            System.out.println("Arquivo nao existe!");
        }
      }
      

      Espero ter ajudado.
      Abraços.

    • Tawane disse:

      Boa noitee
      Me ajudou muito o código
      vc poderia mandar ele pra mim por email?

  11. Wilson disse:

    Bom dia!!!!
    Tenho um trabalho que e para fazer um ficheiro texto (txt) de 30 linhas no minimo com a informação de objecto!!!!
    como faco?

  12. JONATHAN disse:

    Parabéns pela aula! No Java, eu consigo ler uma linha ou X linhas de um arquivo.txt, e só depois de alguns segundos ler outra? Tipo no início dos filmes que aparece um nome, some, aparece outro nome, some, aparece outro, etc ??

    • Dan_Atilio disse:

      Boa noite Jonathan, tudo bem?
      No caso para isso, você precisaria dar um sleep na thread, abaixo um exemplo:

          //forçando a espera de 1500 milissegundos (1,5 segundos)
          try {
            Thread.sleep (1500);
          }
          catch (InterruptedException ex) {}
      

      Qualquer dúvida, fico à disposição.
      Um grande abraço.

  13. Victormf disse:

    Ola gostei bastante, muito bom o conteudo porem estou com um certa dificuldade para fazer somente uma escrita no arquivo, sei que esta falando sobre criar e ler arquivo más se poder me ajudar agradeço. Ex: peço pro usuario entrar com o caminho do arquivo ai verifico se tem o arquivo se não tiver, falo para tentar novamente. Más se tiver peço para ele digitar o que quiser e depois de digitar dar enter sair e salvar.
    Fiz vários testes mas não sei muito sobre buferwrite, filewrite, nos meus testes verifica o caminho e abre normal mas não consigo fazer a interação para o usúario digitar o que quiser e salvar. Desde já agradeço.

    • Dan_Atilio disse:

      Boa noite Victor, tudo bem?
      Mas qual é a dificuldade que está tendo? Em incrementar o conteúdo do arquivo? Ou na geração dele?

      • Victormf disse:

        Boa tarde, tudo bem e voce?
        Estou com mais dificuldade na parte do incremento do arquivo, para o usuário digitar o conteúdo. É que não tenho muita experiencia com escrita de arquivos write :/

        • Dan_Atilio disse:

          Boa noite Victor, também estou bem graças a Deus.
          Então, não sei se existe algum método específico para incrementar arquivo, mas preparei um exemplo onde é lido um arquivo e depois alterado o conteúdo dele.
          Veja se te ajuda.

          import java.util.Formatter;
          import java.io.*;
          import java.util.Scanner; 
          
          public class editTxt{
          
          	public static void main(String[] args){
          		String nomeArq = "gerado.txt";
          		String conteudo = "";
          		String linha = "";
          		String linhaNova = "";
          		File arq = new File(nomeArq);
          		Scanner ler = new Scanner(System.in); 
          
          		//se o arquivo existir, pega o conteúdo dele
          		if (arq.exists()) {
          			try {
          				FileReader reader = new FileReader(nomeArq);
          				BufferedReader leitor = new BufferedReader(reader);
          
          				while(true) {
          					linha=leitor.readLine();
          
          					if(linha==null)
          					break;
          
          					conteudo += linha+"\n";
          				}
          			}
          			catch(Exception erro) {}
          		}
          		
          		//Nova linha
          		System.out.printf("Insira a nova linha: \n> "); 
          		linhaNova = ler.nextLine(); 
          		conteudo += linhaNova+"\n";
          		
          		//Agora tenta salvar o conteúdo, incluindo o que o usuario digitar
          		try {
          			Formatter saida = new Formatter(nomeArq);
          			saida.format(conteudo);
          			saida.close();
          			System.out.printf("Arquivo '"+nomeArq+"' gerado / atualizado!\n\n");
          		}
          		catch(Exception erro){
          			System.out.printf("Arquivo '"+nomeArq+"' nao pode ser gerado / atualizado!\n\n");
          		}
          	} 
          }
          

          Abraços.

        • VictorMF disse:

          Boa noite, muito obrigado mesmo pela ajuda, ajudou sim. Grande abraço que Deus abençoe!

  14. Maycon disse:

    Olá boa noite, parabéns pelo post! Sei que é post antigo, porém fiquei com um probleminha aqui no meu! Eu fiz idêntico ao seu e funcionou normal quando executado pelo netbeans, porém quando gero o JAR do projeto ele não encontra o caminho do XML a menos que eu coloque o caminho exato c:\……

Deixe uma resposta

Terminal de Informação