Ler e escrever em arquivos

JAVEM…



Pessoal eu preciso ler um arquivo, colocar todo o seu conteúdo em uma variável do tipo string, apagar o último caracter desta variável, acrescentar mais um texto e gravar novamente no arquivo.



Minha dificuldade é ler o arquivo, coloca-lo em uma variável e gravar novamente neste mesmo arquivo. Eu li a API java.io.* mas não ficou nada claro. Alguem pode me dar mais um Help??? :wink:



Valeus…

E aí,



//Conteudo

char[] conteudo



//Arquivo

File f = new File("c:\teste"); São duas barras mais o forum comeu uma :-]



//Ler

FileReader in = new FileReader(f);

in.read(conteudo);



//Remover ultimo caracter

conteudo.substring(0,conteudo.length()-1);



//Acrescentar texto

conteudo.concat("texto acrescentado");



//Gravar

FileWriter out = new FileWriter(f);

out.write(conteudo);





Essa é uma forma bem básica e pode requerer algumas adaptações nos códigos acima, como converter o array conteudo em string, mais acho que dá pra quebrar um galho. Não esqueça de tratar as Exceções de IOException.





Atenciosamente

Volnei Granado Munhoz :wink:







[ Esta mensagem foi editada por: Volnei em 14-02-2003 16:46 ]

[ Esta mensagem foi editada por: Volnei em 14-02-2003 16:47 ]

E também não esqueça de utilizar o método close() do FileReader e FileWriter quando terminar de usar.

Nunca é bom deixar esses objetos abertos.

Code:
  


import java.io.*;
public class Arquivo {
public static void main(String[] args) {

// Arquivo de entrada
File f = new File("Arquivo.java");
// Arquivo de saida
File f2 = new File("arquivo2.txt");
String tudo = "";

try {
// Stream de entrada
FileInputStream in = new FileInputStream(f);
// Stream de saida
FileOutputStream out = new FileOutputStream(f2);

// Verifica numero de bytes que podem ser lidos
int bytesAvailable = in.available();
// array de bytes onde as informações lidas
// serão colocadas.
byte[] lido = new byte[bytesAvailable];

// verifica se o arquivo de entrada existe.
if(f.exists()) {
// Lê o arquivo de entrada.
int temp = in.read(lido);
// Se tiver lido o arquivo sem erro
// temp será diferente de -1
if(temp != -1) {
// A String que guarda todo o arquivo
// é concatenada com o que foi lido.
tudo += new String(lido);
// imprime conteudo do arquivo.
System.out.println("Conteudo Lido: " + tudo);
// retira a ultimo caractere.
// Atencao: desconsidera caracters espaço(" ")
tudo = tudo.trim().substring(0,tudo.length() - 1);
// Acrescentando texto.
tudo += "n jack_-_ganzha";
// Escreve no arquivo de saida.
out.write(tudo.getBytes());
} else {
System.out.println("Erro lendo o arquivo.");
}

} else {
System.out.println("O arquivo"
+ f.getAbsolutePath()
+ " nao foi encontrado.");
}

// fecha as streams
in.close();
out.close();
} catch(Exception ex) {
System.out.println("ERRO: " + ex);
}
}
}




Obs.: Nesse codigo eu leio TODO o arquivo de uma vez só. Não é assim que deve ser. Mas, como estava um pouco apressado acabei fazendo na marra. Veja a documentação com mais cuidado para fazer de uma maneira melhor. Tambem só fiz um teste. Faça outros com um arquivo vazio ou inexistente.

Qualquer duvida... é só perguntar...

valeuz...

Valeu pelo ajuda pessoal…

mas aconteceu o seguinte nessas linhas:



//Remover ultimo caracter

conteudo.substring(0,conteudo.length()-1);



//Acrescentar texto

conteudo.concat("texto acrescentado");



Não é possível chamar substring(int, int) no tipo de matriz char[]

Não é possível chamar concat(String) no tipo de matriz char[]



E agora??? Já tentei converter pra String mas não deu certo

:-[

Use



String cont = new String(conteudo);



//agora aplique esses métodos (substring e concat) na String cont



Volnei Granado Munhoz :smiley: