Java 使用EOFEException结束循环

Java 使用EOFEException结束循环,java,Java,我将班级学生的对象保存在名为file.txt的文件中 我不知道文件中有多少学生对象。如何使用EOFEException结束循环。 我不能纠正这个例外,有什么帮助吗 students class class students implements java.io.Serializable { String Frist; String Second; String Phone; String CityAddress; String CityStreet; students(){} students

我将班级学生的对象保存在名为file.txt的文件中 我不知道文件中有多少学生对象。如何使用EOFEException结束循环。 我不能纠正这个例外,有什么帮助吗

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) 
如何使用EOFEException结束循环

你写的应该有用。catch块中的
中断
应终止循环

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

这是我主要尝试的,但有例外

我不能纠正这个例外

您是说在
EOFEException
上出现编译错误吗?如果是,请检查是否已导入

否则,您需要向我们显示异常的完整stacktrace。。。包括异常名称和消息

更新

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

这是在数据持久性方案中使用Java序列化的问题之一。(见附件)


如果不知道您是如何达到这种状态的,就无法给出解决方案。

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

这是错误的/没有帮助的。1) 如果他只是打印出这样的信息,他不需要分配空间。2) 扫描仪用于文本输入。他正在尝试读取序列化对象。表示是二进制的,不是文本。我看不懂图像。它太小了,您似乎已经切掉了消息的一些文本。将stacktrace剪切并粘贴为文本。线程“main”java.io.InvalidClassException中的异常:sheet2_7.students;本地类不兼容:java.io.ObjectInputStream.readClassDesc的java.io.ObjectInputStream.readClassDesc的java.io.ObjectStreamClass.initNonProxy(ObjectStreamClass.java:621)处的stream classdesc serialVersionUID=-4264328281487890061,本地类serialVersionUID=39780589333518525(ObjectInputStream.java:1518)在java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1774)在java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1351)在java.io.ObjectInputStream.readObject(ObjectInputStream.java:371)在sheet2_7.main(sheet2_7.java:81)java结果:1高…进入问题。。。