gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 22:58:32 26 4
gpt4 key购买 nike

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

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");
}

以及输出方法:

public void output(){
System.out.format("%-30s%-30s%s\n", this.getName(), this.getBirthday().output(), this.getAvg_score());
}

最佳答案

EOFException没有任何问题

Signals that an end of file or end of stream has been reached unexpectedly during input.

在您提供的示例中

Student x = (Student) in.readObject();
if(x != null)

readObject 在到达文件末尾时不会返回 null,它会抛出 EOFException,因此如果存在包含以下内容的文件:

StudentA
StudentB

StudentAStudentB 将被添加到 objectsList 中,但在第三次执行时 readObject() 将抛出异常EOFException

这里的主要问题是如何处理这个异常,尝试这样的事情:

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

我希望这有帮助。

关于java - 如何修复在没有任何对象信息的情况下读取文件的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58429920/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com