我将班级学生的对象保存在名为file.txt的文件中 我不知道文件中有多少学生对象。我怎样才能使用EOFException来结束循环。 并且我无法纠正该异常可以提供任何帮助
students class
class students implements java.io.Serializable {
String Frist;
String Second;
String Phone;
String CityAddress;
String CityStreet;
students(){}
students(String s1,String s2,String s3,String s4,String s5){
Frist=s1;
Second=s2;
Phone=s3;
CityAddress=s4;
CityStreet=s5;
}
}
this i try in main but give exception
public static void main(String[] args) throws Exception {
// TODO code application logic here
students s;
ObjectInputStream input =new ObjectInputStream(new FileInputStream("file.txt"));
while(true)
{
try
{
s=(students)(input.readObject());
System.out.print(s.Frist +" ");
System.out.print(s.Second+" ");
System.out.print(s.Phone+" ");
System.out.print(s.CityAddress+" ");
System.out.println(s.CityStreet);
}catch(EOFException ex)
{
break;
}
}
input.close();
}
这是异常堆栈跟踪:
Exception in thread "main" java.io.InvalidClassException: sheet2_7.students; local class incompatible:
stream classdesc serialVersionUID = -4264328281487890061,
local class serialVersionUID = 397805898333518525
at java.io.ObjectStreamClass.initNonProxy(ObjectStreamClass.java:621)
at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1623)
at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1518)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1774)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1351)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:371)
at sheet2_7.Sheet2_7.main(Sheet2_7.java:81)
答案 0 :(得分:2)
如何使用EOFException结束循环。
你所写的内容应该有效。 catch块中的break
应该终止循环。
或者,将循环移到 try块中。抛出异常时,您将在执行catch块之前终止循环。
这是我尝试在主要但是给予例外
我无法纠正该异常
您是说在EOFException
上收到编译错误?如果是这样,请检查您是否已将其导入。
否则,您需要向我们展示异常的完整堆栈跟踪...包括异常名称和消息。
<强>更新强>
异常堆栈跟踪告诉我,串行对象的序列化签名与代码中类的签名不匹配。这很可能意味着您在创建序列化对象后已经更改了类。
这是在数据持久性方案中使用Java序列化的问题之一。 (见What is a serialVersionUID and why should I use it?)
在不知道你是如何达到这种状态的情况下,无法建议解决方案是什么。
答案 1 :(得分:0)
首先,您需要在阅读后为学生分配空间。 其次,您可以使用Scanner类在处理之前检查下一行是否有任何内容。