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.
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
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!");
}
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);
Para continuar escrevendo no mesmo arquivo sem sobrescrever o conteúdo existente, você pode usar o construtor do FileWriter que permite a adição de novos dados ao final do arquivo. Basta alterar a linha onde você instancia o FileWriter para:
FileWriter arq = new FileWriter("C:\\Users\\antruz\\Documentos\\texto.txt", true);
O segundo parâmetro true indica que você quer abrir o arquivo em modo de escrita, mas mantendo o conteúdo existente e escrevendo no final dele. Dessa forma, os novos dados serão adicionados ao final do arquivo, sem apagar o que já está escrito.
Além disso, é uma boa prática fechar o PrintWriter e o Scanner após o uso. Você pode fazer isso no final do seu código:
gravarArq.close();
sc.close();
Isso garantirá que os recursos sejam liberados corretamente.
Para garantir que os novos conteúdos sejam adicionados ao arquivo existente em vez de substituí-lo, você precisa abrir o arquivo em modo de adição. Isso pode ser feito adicionando um segundo parâmetro ao construtor FileWriter, configurando-o como true. Aqui está como você pode fazer isso:
FileWriter arq = new FileWriter("C:\\Users\\antruz\\Documentos\\texto.txt", true);
Isso permitirá que você adicione novos conteúdos ao final do arquivo existente em vez de substituí-lo. Com essa modificação, seu programa continuará a escrever novos conteúdos no mesmo arquivo sem sobrescrever o que já foi escrito.