Esse foi o código funciona perfeitamente. Ele sempre cria uma nova linha e escreve nela a mensagem, mas da primeira vez que
o programa roda, há a criação de uma nova linha (como o código descreve), e então ele salva (da primeira vez) na segunda
linha.
Como eu faço para que da primeira vez que seja executado, o programa salve a mensagem na primeira linha e não na segunda???
é só vc tirar esse “bw.newLine();”, pois
quando vc usa FileOutputStream com os dois parametros (endereço , true), ele já salva coretamente na linha SEM sobescrever…
Cara, uma das formas eh voce reescrever todo o conteudo do arquivo conforme o codigo abaixo:
importjava.io.BufferedReader;importjava.io.BufferedWriter;importjava.io.File;importjava.io.FileNotFoundException;importjava.io.FileOutputStream;importjava.io.FileReader;importjava.io.FileWriter;importjava.io.IOException;importjava.io.OutputStream;importjava.io.OutputStreamWriter;publicclassTeste{/** * @param args */publicstaticvoidmain(String[]args){try{Stringmessagem="minha nova frase";Filefile=newFile("arquivo.txt");StringBuilderconteudo=newStringBuilder();BufferedReaderreader=newBufferedReader(newFileReader(file));Stringlinha=null;booleanisPrimeiraLinha=true;while((linha=reader.readLine())!=null){if(isPrimeiraLinha){linha=messagem;isPrimeiraLinha=false;}conteudo.append(linha);conteudo.append("\n");}reader.close();BufferedWriterwriter=newBufferedWriter(newFileWriter(file));writer.write(conteudo.toString());writer.close();}catch(FileNotFoundExceptione1){e1.printStackTrace();}catch(IOExceptione1){e1.printStackTrace();}}}
T+
ViniGodoy
Para escrever em arquivos de textos, use os Writers, não os Streams.
Caso contrário, vai ser fácil você ter problemas com acentuação.
try{
FileWriterfw=newFileWriter("arquivo.txt",true);BufferedWriterbw=newBufferedWriter(fw);PrintWriterpw=newPrintWriter(bw);try{
pw.println(mensagem); //Mensagem tem um "s" só.}finally{
//Rodeosfechamentosnumfinallyparagarantirqueserãoexecutados.
if(pw!=null){
pw.flush();pw.close();}
if(bw!=null){
bw.flush();bw.close();}
if(fw!=null){
fw.flush();fw.close();}
}catch(Exceptione){
thrownewRuntimeException(e);
}
Com o PrintWriter você terá os mesmos métodos que tem no System.out para escrever no arquivo (print, println, printf, etc).
J
jonhzihnhoOo
Damiao eu coloquei o bw.newLine() para que não fique salvando sempre na mesma linha. Resolvi o problema invertentendo as linhas de código:
ANTES
bw.newLine();
bw.append(mensagem);
DEPOIS
bw.append(mensagem);
bw.newLine();
Valeu pela ajuda
…
Vini Fernandes esse exemplo que vc me deu é legal, mas no meu caso específico, eu tenho que usar apenas o OutputStream (o meu professor exige)
sem o StringBuilder, mesmo assim agradeço a ajuda.
ViniGodoy
Fale com o seu professor sobre o PrintWriter. Essa maneira de escrever texto em arquivos é errada. Ela não considera a codificação da String.
J
jonhzihnhoOo
ViniGodoy vou procurar sobre o assunto e falar com ele. Ele usa o OutputStream pois usa como base a apostila da Caelum FJ11 (sobre orientação a objetos).