Erjan
Erjan

Reputation: 11

How to read multiple same objects from a file

I am trying to read objects from a file(same objects of a class), using Serializable, but whenit reads all objects it gives me error IOException, java.io.ObjectInputStream$BlockDataInputStream.peekByte.

I am reading objects and then saving to list. But as it reached lets say EOF it throws error.

Here is my method:

private static void updateBook(String name) {
    // TODO Auto-generated method stub
    FileInputStream fis = null;
    ObjectInputStream in = null;
    Object obj = new Object();
    List<Object> libb = new ArrayList<Object>();
    File file = new File(name + ".ser");
    if (file.exists()) {
        try {
            fis = new FileInputStream(file);
            in = new ObjectInputStream(fis);
            try {
                while (true) {

                    obj = in.readObject();
                    libb.add(obj);
                }
            } catch (OptionalDataException e) {
                if (!e.eof) throw e;
                //JOptionPane.showMessageDialog(null, "Done!");
            } finally {
                in.close();
                //fis.close();
            }

            for(int j = 0; j < libb.size(); ++j) {
                Book li = new Book();

                 li = (Book) libb.get(j);
                System.out.println(li.getBookName());
            }
            //

        } catch (IOException e) {
            e.printStackTrace();

        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    } else {
        System.out.println("\nThe file does not Exist!");
    }
}

Can anyone please tell me how to avoid this error from while(true).

Complete error:

java.io.EOFException
at java.io.ObjectInputStream$BlockDataInputStream.peekByte(Unknown Source)
at java.io.ObjectInputStream.readObject0(Unknown Source)
at java.io.ObjectInputStream.readObject(Unknown Source)

Upvotes: 1

Views: 71

Answers (2)

mani
mani

Reputation: 3096

you should add:

catch (EOFException e){
    // do stuffs
}

as EOFException is not being caught.

Upvotes: 0

Ant&#243;nio Ribeiro
Ant&#243;nio Ribeiro

Reputation: 4202

On your try statement you are missing the catch clause for the EOFException:

try {
    while (true) {

        obj = in.readObject();
        libb.add(obj);
    }
} catch (OptionalDataException e) {
    if (!e.eof) throw e;
    //JOptionPane.showMessageDialog(null, "Done!");
} catch (EOFException eofe) {
    // treat it as you like
} finally {
    in.close();
    //fis.close();
}

Upvotes: 1

Related Questions