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