使用EOFException结束循环

时间:2015-03-01 03:10:43

标签: java

我将班级学生的对象保存在名为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) 

2 个答案:

答案 0 :(得分:2)

  

如何使用EOFException结束循环。

你所写的内容应该有效。 catch块中的break应该终止循环。

或者,将循环移到 try块中。抛出异常时,您将在执行catch块之前终止循环。

  

这是我尝试在主要但是给予例外

     

我无法纠正该异常

您是说在EOFException上收到编译错误?如果是这样,请检查您是否已将其导入。

否则,您需要向我们展示异常的完整堆栈跟踪...包括异常名称和消息。

<强>更新

异常堆栈跟踪告诉我,串行对象的序列化签名与代码中类的签名不匹配。这很可能意味着您在创建序列化对象后已经更改了类。

这是在数据持久性方案中使用Java序列化的问题之一。 (见What is a serialVersionUID and why should I use it?

在不知道你是如何达到这种状态的情况下,无法建议解决方案是什么。

答案 1 :(得分:0)

首先,您需要在阅读后为学生分配空间。 其次,您可以使用Scanner类在处理之前检查下一行是否有任何内容。