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

Esses e outros códigos, estão disponíveis gratuitamente no nosso GitHub, acesse em github.com/dan-atilio/Java.

Download do código fonte:
Download pelo OneDrive
Ou
Download pelo 4Shared

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

About Dan_Atilio

Analista e desenvolvedor de sistemas na TOTVS Oeste Paulista Bauru. Técnico em Informática pelo CTI da Unesp. Graduado em Banco de Dados pela Fatec Bauru. Entusiasta de soluções Open Source e blogueiro nas horas vagas. Autor do projeto Terminal de Informação, onde são postados tutoriais e notícias envolvendo o mundo da tecnologia.

33 respostas em “Criando e Lendo arquivos Texto em Java

  1. 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

    • 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.

        • 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 ?

        • 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.

        • 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.

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

    • Boa noite Ian,
      Primeiramente, obrigado pelo apoio ao blog…
      Desculpe, não entendi sua dúvida.
      Disponibilizar pasta compactada do sistema? Quer abrir um arquivo compactado, ou ler um arquivo texto de dentro de um arquivo compactado, ou é outra dúvida?
      Abraços.

    • Opa blz? estou com uma dúvida, pois o o código não está lendo oque tem dentro do arquivo xml, mesmo eu colocando as tags e tudo mais… vlw um abraço

  3. 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?

    • 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.

  4. 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…

    • 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.

  5. 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.

    • 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.

  6. 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;

    • 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.

  7. 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?

  8. 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 ??

    • 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.

Deixe uma resposta