Olá pessoal do GUJ…
Estou com uma dúvida sobre com escrever na primeira linha de um arquivo txt. Vamos ao código-fonte:
try {
OutputStream os = new FileOutputStream("arquivo.txt", true);
OutputStreamWriter osw = new OutputStreamWriter(os);
BufferedWriter bw = new BufferedWriter(osw);
bw.newLine();
bw.append(messagem);
bw.close();
} catch (FileNotFoundException e1) {
e1.printStackTrace();
} catch (IOException e1) {
e1.printStackTrace();
}
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???
Agradeço desde já, Jonh
é 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…
testa esse código ai…
try {
FileOutputStream os = new FileOutputStream("arquivo.txt", true);
OutputStreamWriter osw = new OutputStreamWriter(os);
BufferedWriter bw = new BufferedWriter(osw);
bw.append(messagem);
bw.close();
} catch (FileNotFoundException e1) {
e1.printStackTrace();
} catch (IOException e1) {
e1.printStackTrace();
}
vlw
Cara, uma das formas eh voce reescrever todo o conteudo do arquivo conforme o codigo abaixo:
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
public class Teste {
/**
* @param args
*/
public static void main(String[] args) {
try {
String messagem = "minha nova frase";
File file = new File("arquivo.txt");
StringBuilder conteudo = new StringBuilder();
BufferedReader reader = new BufferedReader(new FileReader(file));
String linha = null;
boolean isPrimeiraLinha = true;
while ((linha = reader.readLine()) != null) {
if(isPrimeiraLinha){
linha = messagem;
isPrimeiraLinha = false;
}
conteudo.append(linha);
conteudo.append("\n");
}
reader.close();
BufferedWriter writer = new BufferedWriter(new FileWriter(file));
writer.write(conteudo.toString());
writer.close();
} catch (FileNotFoundException e1) {
e1.printStackTrace();
} catch (IOException e1) {
e1.printStackTrace();
}
}
}
T+
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.
[code]try {
FileWriter fw = new FileWriter(“arquivo.txt”, true);
BufferedWriter bw = new BufferedWriter(fw);
PrintWriter pw = new PrintWriter(bw);
try {
pw.println(mensagem); //Mensagem tem um “s” só.
} finally {
//Rode os fechamentos num finally para garantir que serão executados.
if (pw != null) {
pw.flush();
pw.close();
}
if (bw != null) {
bw.flush();
bw.close();
}
if (fw != null) {
fw.flush();
fw.close();
}
} catch (Exception e) {
throw new RuntimeException(e);
}[/code]
Com o PrintWriter você terá os mesmos métodos que tem no System.out para escrever no arquivo (print, println, printf, etc).
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.
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.
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).