Read multiple objects in Java serializable file

1

I have a Produtos.ser file where several objects of type Objeto were written. In the code method below, I want to retrieve all objects from the file and store them in an ArrayList list.

However, it only adds the first object to the ArrayList. Any help?

public ArrayList<Produto> recuperarProdutos(){
    ArrayList<Produto> produtos = new ArrayList<>();
    Produto p = new Produto();

    ObjectInputStream leitorObj = null;
    FileInputStream leitorArquivo = null;
    try {
        leitorArquivo = new FileInputStream("files\Produtos.ser");
        leitorObj = new ObjectInputStream(leitorArquivo);
        p = (Produto)leitorObj.readObject();
        produtos.add(p);
    } catch(EOFException e) {
    try {
        leitorArquivo.close();
    } catch (IOException ex) {
        System.out.println(ex.getMessage());
    }
    } catch (Exception ex) {
        System.out.println(ex.getMessage());
    } finally {
        try {
            if (leitorArquivo != null) leitorArquivo.close();
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }
    }

    return produtos;
}
    
asked by anonymous 07.02.2014 / 13:49

1 answer

2

Try to read as follows:

while(true){
   try{
     p = (Produto)leitorObj.readObject();
     produtos.add(p);
   catch(Exception e){
     break;
   }
}
return produtos;

I suppose this should solve your problem. I'm basing on this answer . This is when you do not know how many objects you have, what I advise you do is save the number of records and replace while(true) with for(int i = 0; i < numObjetos; i++) , then try\catch becomes unnecessary.

    
07.02.2014 / 13:58