Escrever de forma contínua em um mesmo arquivo.txt

Pessoal, estou aprendendo sobre a classe file e no código que gerei meu programa grava sempre um arquivo por cima do outro, sendo que eu queria continuar escrevendo vários conteúdos, de acordo com o construtor, no mesmo arquivo.

Obs.: sei que o código não está errado como se tivesse um bug e tal, eu é que quero saber uma solução pra essa questão. :slight_smile:

Eu imagino que seja necessária uma leitura do arquivo antes ou algo do tipo utilizando o “.exists()” e o “.isFile()” para depois escrever nele, mas confesso que a parte da continuidade da escrita que não sei como codar :thinking:

Vou postar abaixo o código abaixo para vocês conferirem:

public static void main(String[] args) throws IOException {
	Scanner sc = new Scanner(System.in);
	String matricula, nome;
	double teste, prova;
	int faltas;
	
	FileWriter arq = new FileWriter("C:\\Users\\antruz\\Documentos\\texto.txt");
	PrintWriter gravarArq = new PrintWriter(arq);
	
	System.out.println("DIGITE SUA MATRICULA: ");
	matricula = sc.nextLine();
	
	System.out.println("DIGITE SEU NOME: ");
	nome = sc.nextLine();
	
	System.out.println("DIGITE SEU TESTE: ");
	teste=sc.nextDouble();
	
	System.out.println("DIGITE SUA PROVA: ");
	prova=sc.nextDouble();
	
	System.out.println("DIGITE SUAS FALTAS: ");
	faltas=sc.nextInt();
	
	gravarArq.println("MATRICULA: " + matricula);
	gravarArq.println("NOME: " + nome);
	gravarArq.println("NOTA DO TESTE: " + teste);
	gravarArq.println("NOTA DA PROVA: " + prova);
	gravarArq.println("TOTAL DE FALTAS: " + faltas);
	arq.close();

	System.out.println("ARQUIVO GRAVADO COM SUCESSO!");
}

}

A class FileWriter tem um construtor que recebe um parâmetro para indicar se pretendes ou não fazer append de um ficheiro existente.

2 curtidas

Dica: sempre consulte a documentação. No caso de FileWriter, aqui diz que vc pode usar um parâmetro para indicar se deve escrever a partir do final do arquivo.

Ou seja, bastaria trocar para:

FileWriter arq = new FileWriter("C:\\Users\\antruz\\Documentos\\texto.txt", true);
1 curtida

@pmlm e @hugokotsubo

Vou dar uma estudada na documentação na parte de construtores.

Obrigado pelas respostas!

Outra coisa, desde o Java 7 vc pode usar o try with resources, assim não precisa chamar close:

try(FileWriter arq = new FileWriter("C:\\Users\\antruz\\Documentos\\texto.txt", true)) {
    // escrever no arquivo 
} catch (IOException e) {
    // tratar erro, mostra mensagem, etc
}

Desta forma é garantido que o arquivo sempre será fechado, mesmo se der algum erro no meio do programa.

1 curtida