1
resposta

Erro ao imprimir do arquivo

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();
    }
}
1 resposta
O post foi fechado por inatividade. Para continuar o assunto, recomendamos criar um novo tópico. Bons Estudos!