[RESOLVIDO] Escrever na primeira linha em um arquivo .txt

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 :smiley:

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).