Amigos, O programa feito na aula sempre que executado sobrescreve os dados anteriormente salvo no arquivo. Resolvi implementar um que a cada execução não apague os dados anteriormente armazenados no arquivo binário (pessoas.bin). Coloquei no construtor FileOutputStream o true, para que não sobrescreva os dados do arquivo, assim:
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("pessoas.bin", true));
O arquivo de fato não sobrescreve, mas na hora de ler o arquivo
ObjectInputStream oio = new ObjectInputStream(new FileInputStream("pessoas.bin"));
e
ArrayList<Pessoa> p = (ArrayList<Pessoa>) oio.readObject();
Só está aparecendo os primeiros dados que foi salvo no arquivo no momento da impressão.
Segue código:
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class Teste {
public static void main(String[] args) throws IOException, ClassNotFoundException {
List<Pessoa> pessoas1 = new ArrayList<>();
String nome;
double pesoCorporal, altura;
Scanner ler = new Scanner(System.in);
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("pessoas.bin", true));
while (true) {
System.out.printf("Informe o nome da pessoa, FIM para encerrar:\n");
nome = ler.nextLine();
if (nome.equalsIgnoreCase("FIM"))
break;
System.out.printf("\nInforme o peso corporal (em kg)...............: ");
pesoCorporal = ler.nextDouble();
System.out.printf("Informe a altura (em metros: 1,77 por exemplo): ");
altura = ler.nextDouble();
pessoas1.add(new Pessoa(nome, pesoCorporal, altura)); // adiciona um novo objeto a lista
ler.nextLine(); // esvazia o buffer do teclado
System.out.printf("\n");
}
oos.writeObject(pessoas1);
oos.close();
ler.close();
ObjectInputStream oio = new ObjectInputStream(new FileInputStream("pessoas.bin"));
List<Pessoa> pessoas2 = (ArrayList<Pessoa>) oio.readObject();
for(Pessoa pessoa : pessoas2) {
System.out.printf("Nome.........: %s\n", pessoa.getNome());
System.out.printf("Peso Corporal: %.2f kgs\n", pessoa.getPC());
System.out.printf("Altura.......: %.2f metros\n", pessoa.getAlt());
System.out.printf("IMC..........: %.2f\n", pessoa.IMC());
System.out.printf("Interpretacao: %s\n\n", pessoa.interpretaIMC());
}
oio.close();
}
}