我是Java的初学者。 我是一个项目,一个餐馆的java软件(计算机工程学生btw)。
我对我使用的某些特定功能有疑问, 我有一个文件夹,其中所有实例都被序列化(每个类一个文件夹)。
有时候,例如当有人想要预订餐桌时,我需要加载餐馆餐桌的所有实例,以检查是否有符合客户需求的餐桌。
问题是,每次我启动预订检查器时,循环都会继续...... EOF异常:
java.io.EOFException
at java.io.ObjectInputStream$PeekInputStream.readFully(Unknown Source)
at java.io.ObjectInputStream$BlockDataInputStream.readShort(Unknown Source)
at java.io.ObjectInputStream.readStreamHeader(Unknown Source)
at java.io.ObjectInputStream.<init>(Unknown Source)
at Couistot.Serialisable.charger(Serialisable.java:46)
at Couistot.AppliGerant.NouvelleRes(AppliGerant.java:315)
at Couistot.AppliGerant.GererReservation(AppliGerant.java:245)
at Couistot.Test.main(Test.java:15)
现在,我在这里查看关于这个问题的内容,
ObjectOutputStream
(我认为我做得正确):我的加载/反序列化方法在这里:
public static Couistot charger(Couistot o) {
ObjectInputStream ois;
//On récupère maintenant les données !
try{
ois = new ObjectInputStream(
new BufferedInputStream(
new FileInputStream(
new File(o.getClass().getName()+"/"+o.toString2()+".txt"))));
try {
o=(Couistot)ois.readObject();
}
catch (Exception e) {
e.printStackTrace();
}
ois.close();
}
catch (FileNotFoundException e) {
e.printStackTrace();
}
catch (IOException e) {
e.printStackTrace();
}
return o;
}
}
这是导致我烦恼的循环:(不要介意法国评论:))
public static void annulerRes() {
if(AppliGerant.nombreTables==0) {
defineNombreTables();
}
@SuppressWarnings("resource")
Scanner sc = new Scanner(System.in);
String nom;
System.out.println("Nom du client qui souhaite annuler sa reservation ?");
nom=sc.nextLine();
for(int i=1;i<nombreTables+(nombreTables*2);i++) {
File f = new File("Couistot.TableResto"+"/"+"Table"+String.valueOf(i)+".txt");
if(f.exists()) {
TableResto tab=new TableResto(i, null,null,0,0,false);
tab=(TableResto) Serialisable.charger(tab);
if(tab.getRes().getClt().getNom()==nom) {
tab.setRes(null);
tab.setNbPlaceReservees(0);
tab.setReservee(false);
}
}
System.out.println("Reservation annulee");
}
}