| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 02/09/2002 11:14:02
|
darta.lima
JavaGuru
![[Avatar]](/images/avatar/c8b89dc23d8f77ac54703.gif)
Membro desde: 02/09/2002 11:11:38
Mensagens: 230
Localização: Rio de Janeiro
Offline
|
Como faço para acessar um arquivo txt, fazer algumas modificações e depois salvar este arquivo com um nome diferente
Um abarço.
|
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 02/09/2002 11:31:23
|
Guilherme Silveira
Administrador
Membro desde: 14/08/2002 10:09:26
Mensagens: 1096
Localização: Sao Paulo
Offline
|
Opa, bem vindo ao forum....
Entao, voce esta querendo abrir um arquivo em modo ASCII, alterar algo e salvar novamente, porem com outro nome.
Existe algumas dezenas de diferentes metodos que vao chegar no mesmo resultado. Vou te explicar um e se nao for o que interessa diga que posso explicar alguns outros.
Basicamente voce tem que primeiro abrir o arquivo que voce quer ler e o que voce quer gravar, fazemos isso ao com o seguinte codigo:
Linha 1: abre o arquivo numa stream
Linha 2: converte bytes em caracteres
Linha 3: cria um buffer para acesso mais rapido ao arquivo
E agora o de escrita:
Linha 1: abre o arquivo para escrita (voce pode abrir para append tambem se desejar)
Linha 2: abre o escritor (converte Strings em caracteres etc)
agora falta ler o arquivo ate o fim e ir jogando os dados no segundo arquivo. primeiro criamos uma variavel que vai ler cada linha e depois um loop do tipo while ira parsear o arquivo inteiro, linha por linha, gravando a nova linha no novo arquivo:
e fechamos os objetos de io:
esse metodo que te ensinei pode ser util quando voce quer alterar uma parte do arquivo, existem outros metodos que irao primeiro ler o arquivo e depois salvar, por exemplo.
detalhe importante: eh bom uso de java fechar todos os objetos de io criados, com o metodo close() apos o uso. Sempre na ordem contraria da abertura.
Espero ter ajudado,
Guilherme Silveira[/i]
|
-------------------------------------------------------
Guilherme Silveirahttp://blog.caelum.com.br
 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 02/09/2002 11:31:53
|
Guilherme Silveira
Administrador
Membro desde: 14/08/2002 10:09:26
Mensagens: 1096
Localização: Sao Paulo
Offline
|
alias esse eh um bom assunto pra um tutorial simples, muita gente ira perguntar sobre isso
Guilherme
|
-------------------------------------------------------
Guilherme Silveirahttp://blog.caelum.com.br
 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 02/09/2002 11:49:16
|
Paulo Silveira
Administrador
![[Avatar]](/images/avatar/a87ff679a2f3e71d9181a67b7542122c.jpg)
Membro desde: 07/08/2002 18:38:50
Mensagens: 4204
Localização: São Paulo
Offline
|
Realmente, este é um tutorial bem simples. Se alguém quiser escrever...
|
http://blog.caelum.com.br twitter: @paulo_caelum
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 02/09/2002 14:04:47
|
darta.lima
JavaGuru
![[Avatar]](/images/avatar/c8b89dc23d8f77ac54703.gif)
Membro desde: 02/09/2002 11:11:38
Mensagens: 230
Localização: Rio de Janeiro
Offline
|
Olá Guilherme , muito obrigado, valeu mesmo, foi uma explicação entanto.
Me diz mais uma coisa, como eu poderia criar uma arquivo.java com um código desse?? Será que haveria como você quebar meu galho nisso também.Gostaria de criar um .class para fazer umas alterações em um txt específico.
Valeu mesmo,
Darta.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 02/09/2002 14:50:40
|
FLC
JavaGuru
Membro desde: 15/08/2002 15:30:08
Mensagens: 212
Localização: São Paulo
Offline
|
Oi, aqui está um exemplo de um programa simples que ilustra como utilizar o que o Guilherme explicou:
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 02/09/2002 15:24:22
|
darta.lima
JavaGuru
![[Avatar]](/images/avatar/c8b89dc23d8f77ac54703.gif)
Membro desde: 02/09/2002 11:11:38
Mensagens: 230
Localização: Rio de Janeiro
Offline
|
Olá FLC, utilizei o seu código, compilei mas não faz nada!!!
será que está faltando algo??
Mudei tambem duas linhas, são elas:
FileInputStream stream = new FileInputStream(args[0]);
para
FileInputStream stream = new FileInputStream("original.txt");
e a outra
FileInputStream stream = new FileInputStream(args[1]);
para
FileInputStream stream = new FileInputStream('modificado.txt");
import java.io.*;
public class abrir_arquivo
{
//
// Este eh um simples programa para ilustrar
// como acessar um arquivo, processar seu conteúdo
// e escrever um novo arquivo texto.
//
// O programa recebe dois argumentos na linha de
// comando: o nome do arquivo para ser processado e
// o nome do arquivo novo. Neste exemplo transformamos
// as letras minúsculas do texto em maiúsculas.
//
// Exemplo de uso do programa:
//
// java ProcessadorTexto arquivo.txt novoArquivo.txt
//
public static void main (String [] args) throws Exception{
// aqui vamos checar se foram passados
// os dois argumentos pedidos.
// args[0] contém o nome do arquivo original
// args[1] contém o nome do novo arquivo
if(args.length != 2){
System.out.println("uso: java ProcessamentoTexto original.txt modificado.txt");
System.exit(1);
}
// agora vem a parte principal do programa, usando como base
// o codigo que o Guilherme colocou no post anterior:
//Modifiquei aqui para ver se ele pegava o arquivo e fazia a converssão,
//não adiantou?? Troquei o arg[0], pelo nome do arquivo??, o que falta?
//FileInputStream stream = new FileInputStream(args[0]);
FileInputStream stream = new FileInputStream("original.txt");
InputStreamReader streamReader = new InputStreamReader(stream);
BufferedReader reader = new BufferedReader(streamReader);
//FileWriter fileWriter = new FileWriter(args[1]);
FileWriter fileWriter = new FileWriter(args["modificado.txt"]);
PrintWriter writer = new PrintWriter(fileWriter);
// Neste while lemos o arquivo linha a linha
String line = null;
while( (line=reader.readLine() ) != null ) {
// Como exemplo, vamos transformar todos
// as letras minúsculas em maiúsculas
String novaLinha = line.toUpperCase();
writer.println(novaLinha);
}
// fechando os objetos de io:
writer.close();
fileWriter.close();
reader.close();
streamReader.close();
stream.close();
}
}
um abraço,
Darta.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 02/09/2002 15:57:57
|
FLC
JavaGuru
Membro desde: 15/08/2002 15:30:08
Mensagens: 212
Localização: São Paulo
Offline
|
Olá!
Estranho nao ter funcionado, eu testei aqui e deu tudo certo! Você tentou testar o código sem modificá-lo? Voce não esqueceu de passar os parâmetros na linha de comando na hora de executar o programa?
Bem, mas se vc quiser deixar os nomes dos arquivos fixos no código faça o seguinte:
Remova o trecho da verificação dos argumentos:
Se voce deixar essa verificação no programa e não passar os dois argumentos pedidos na linha de comando, o programa não irá fazer nada e vai imprimir a mensagem "uso: java ProcessamentoTexto original.txt modificado.txt".
Outra coisa:
No código que voce colocou está assim:
O vetor de Strings "args" só deve ser usado caso você queira pegar os argumentos da linha de comando. Além disso, ele só pode ser indexado por inteiros. Na hora de compilar, o javac vai reclamar dessa linha. Para corrigir isso, essa linha deve ficar assim:
Espero que isso resolva seu problema! Apenas uma última consideração: É sempre mais vantajoso passar parâmetros na linha de comando, do que deixar os nomes dos arquivos fixos dentro do programa. Dessa forma, se algum dia você quiser rodar o mesmo programa mas para arquivos de nomes diferentes, não será necessário editar o código e recompilar o programa.
Flávio
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 02/09/2002 17:14:17
|
darta.lima
JavaGuru
![[Avatar]](/images/avatar/c8b89dc23d8f77ac54703.gif)
Membro desde: 02/09/2002 11:11:38
Mensagens: 230
Localização: Rio de Janeiro
Offline
|
Foi mal, em uma linha que vc escreveu que caiu a ficha, eu só estava mandando executar assim:
java abrir_arquivo
mas precisava ser assim
java arquivo_abrir original.txt modificado.txt, assim funcionou!!!
Valeu!!
Qualquer coisa eu grito!!
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 12/09/2008 10:01:24
|
Sued
Thread.start()
![[Avatar]](/images/avatar/c4760fdb6f393e3adad5f7eda06a80e5.jpg)
Membro desde: 06/05/2008 09:03:55
Mensagens: 25
Offline
|
ola, tudo pode disponibilizar tua classe, pois segui os passos e retorma pra mim, que não consegue encontrar o arquivo..
grato.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 12/09/2008 10:07:55
|
jpcasati
JavaGuru
![[Avatar]](/images/avatar/4d215ab7508a3e089af43fb605dd27d1.jpg)
Membro desde: 01/05/2006 03:27:42
Mensagens: 208
Localização: São Carlos-SP
Offline
|
nossa há mais de 6 anos atrás!
|
http://br.linkedin.com/in/jpcasati
Linguagens: Java e PHP.
Interesses: Criptografia, Web 2.0, Sistemas de Informação, Processamento Digital de Imagens. |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 04/02/2009 09:36:42
|
Boaz
Smalltalk
Membro desde: 04/03/2008 10:12:22
Mensagens: 2
Offline
|
Há algum problema em não fechar os objetos de io utilizando finally, caso seja lançado uma exceção antes de fecha-los? Eles ficaram abertos pra sempre, ou até qdo o gv "limpa-los"?
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 04/02/2009 09:38:18
|
Boaz
Smalltalk
Membro desde: 04/03/2008 10:12:22
Mensagens: 2
Offline
|
ops, ...ou até qdo o gc "limpa-los"?
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 04/02/2009 09:41:53
|
thingol
Moderador
Membro desde: 29/07/2004 16:10:13
Mensagens: 17543
Offline
|
Boaz wrote:Há algum problema em não fechar os objetos de io utilizando finally, caso seja lançado uma exceção antes de fecha-los? Eles ficaram abertos pra sempre, ou até qdo o gv "limpa-los"?
Há sim; o segundo passo do gc chama os finalizadores, que fecha os arquivos que ficaram abertos por acidente, mas não é bom confiar no segundo passo porque pode ser até que o programa seja encerrado antes do tal segundo passo ser chamado - e isso deixará arquivos mal-fechados e corrompidos. O correto é sempre fechar arquivos.
|
|
|
|
 |
|
|