Java 如何从一个文件中读取多个相同的对象
我试图使用Serializable从文件(类的相同对象)中读取对象,但当它读取所有对象时,会出现错误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
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();
}