Java 如何从一个文件中读取多个相同的对象

Java 如何从一个文件中读取多个相同的对象,java,eclipse,object,serializable,Java,Eclipse,Object,Serializable,我试图使用Serializable从文件(类的相同对象)中读取对象,但当它读取所有对象时,会出现错误IOException,java.io.ObjectInputStream$BlockDataInputStream.peekByte 我正在读取对象,然后保存到列表中。但当它到达时,我们可以说EOF抛出了错误 以下是我的方法: private static void updateBook(String name) { // TODO Auto-generated method stub

我试图使用Serializable从文件(类的相同对象)中读取对象,但当它读取所有对象时,会出现错误
IOException
java.io.ObjectInputStream$BlockDataInputStream.peekByte

我正在读取对象,然后保存到列表中。但当它到达时,我们可以说EOF抛出了错误

以下是我的方法:

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!");
    }
}
您应该添加:

catch (EOFException e){
    // do stuffs
}

由于未捕获
EOFEException

try
语句中,您缺少
EOFEException
的catch子句:

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();
}

@aribeiro的可能重复是不同的,因为我有finally子句,但我仍然得到EOF错误。是的,但是你没有捕获到
EOFEException
。哦,我明白了,谢谢。已解决。
中断不能在循环外部使用
是-在循环时未意识到
的位置
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();
}