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); } }
$> 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); } } }
#> 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); } }
$> 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); } } }
Bom pessoal, por hoje é só.
Abraços e até a próxima.
Bah, Valeu mesmo, me ajudou bastante, belo trabalho…
Opa… Muito obrigado Franchesco.
Fico feliz em ter ajudado.
Abraços.
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.
Dá uma ajudinha? Sei que o post é antigo kk
Mas eu gostaria de saber como eu altero o local onde vou salvar o arquivo…
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.
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.
O Ian, o caminho do arquivo com duas \, por exemplo: “M:\\nome_da_pasta\\nome_do_arquivo.xml”;
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
Boa noite João.
Chega a mostrar alguma mensagem de erro?
Tem alguma quebra de linha o xml?
Olha eu estou fazendo Técnico em informática, e consegui resolver o meu trabalho a partir do código, muito bom, valeu mesmo.
Boa noite Kelvyn,
Muito obrigado, se tiver novas dúvidas, ou sugestões, pode entrar em contato.
Abração e boa semana.
Excelente tutorial.
Bom dia Bruno.
Muito Obrigado.
Abraços e uma boa semana.
Estou colocando o n mas não esta pulando a linha
Boa noite Victor.
Por favor, cole aqui o trecho que você está utilizando o n.
Abraços.
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.
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.
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:
Espero ter ajudado.
Um grande abraço.
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.
Espero ter ajudado.
Abraços.
Boa noitee
Me ajudou muito o código
vc poderia mandar ele pra mim por email?
Boa tarde Tawane.
Claro, envio sim.
Caso queira, acesse nosso GitHub, lá tem esse e outros exemplos para download:
https://github.com/dan-atilio/Java
Abraços.
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?
Boa tarde Wilson, tudo bem?
Não entendi, você precisa fazer uma classe para instanciar um objeto, e ler o arquivo texto?
Fico no aguardo.
Abraços.
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:
Qualquer dúvida, fico à disposição.
Um grande abraço.
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.
Boa noite Victor, tudo bem?
Mas qual é a dificuldade que está tendo? Em incrementar o conteúdo do arquivo? Ou na geração dele?
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 :/
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.
Abraços.
Boa noite, muito obrigado mesmo pela ajuda, ajudou sim. Grande abraço que Deus abençoe!
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:\……
Boa noite Maycon, tudo bem?
Tente forçar o apontamento para o mesmo diretório do jar, por exemplo:
Abraços.