Java 如何修复在没有任何对象信息的情况下读取文件的错误

Java 如何修复在没有任何对象信息的情况下读取文件的错误,java,file,Java,File,我有一个关于写和读学生名单文件的练习。问题是,当我的文件为空时,read file方法表示文件的结尾,但当我将一个学生写入文件时,它仍然表示文件的结尾,即使我的文件不是空的,它也包含学生的信息,我使用方法输出来获取关于学生的信息。 它总是告诉我“文件结束”没有数据输出,我不知道原因。 我真的很感谢你的帮助 public void readFile(ListStudent a) throws FileNotFoundException, IOException, ClassNotFoundExce

我有一个关于写和读学生名单文件的练习。问题是,当我的文件为空时,read file方法表示文件的结尾,但当我将一个学生写入文件时,它仍然表示文件的结尾,即使我的文件不是空的,它也包含学生的信息,我使用方法输出来获取关于学生的信息。 它总是告诉我“文件结束”没有数据输出,我不知道原因。 我真的很感谢你的帮助

public void readFile(ListStudent a) throws FileNotFoundException, IOException, ClassNotFoundException{
        ArrayList<Student> objectsList = new ArrayList<Student>();
        try( ObjectInputStream in = new ObjectInputStream(new FileInputStream("D:\\Files\\Students.txt"))){
            boolean cont = true;

            while(cont){
                Student x = (Student) in.readObject();
                if(x != null)   
                    objectsList.add(x);

                else cont = false;
            }
            a.setArr(objectsList);
            for(Student x : a.getArr())
                x.output();
            in.close();
        }
        catch(EOFException eof){
            System.out.println("End of file");
        }

EOFEException没有问题

表示在输入过程中意外到达文件结尾或流结尾

在您提供的示例中

Student x = (Student) in.readObject();
if(x != null)   
当到达文件末尾时,
readObject
不会返回null,它会抛出
EOFException
,因此如果存在具有以下内容的文件:

StudentA
StudentB
StudentA
StudentB
将添加到
objectsList
,但在第三次执行时
readObject()
将抛出
eofeexception

这里的主要问题是如何处理此异常,请尝试以下操作:

while(cont){
 try{
   Object x = (Object) in.readObject();
 } catch (EOFException e) {
   cont = false; // or just break
 }
}

我希望这有帮助

非常感谢,我意识到我使用了键工作瞬态,但有误解,因此字段没有写入我的文件,但我仍然感到困惑,我的程序抛出java.io.NotSerializableException,即使我让学生类实现Serializable

正在编写Students.txt的位置?调用
readFile
之前是否刷新并关闭该文件?
while(cont){
 try{
   Object x = (Object) in.readObject();
 } catch (EOFException e) {
   cont = false; // or just break
 }
}