下面的代码,没有文件user.ini运行时正常,有的时候会出现Reading Error123:java.io.EOFException,此时的
allconfigfile及currentfile也尚未赋值,但感觉跟这个没关系,请大家指点下新手
=========================
class Usersetup implements Serializable {
private Vector allconfigfile = new Vector(); private String currentfile; public Usersetup() { } public void init() {
File configfile = new File("Data\\user.ini");
if (configfile.exists()) {
try {
FileInputStream fi = new FileInputStream(configfile);
ObjectInputStream si = new ObjectInputStream(fi);
this.currentfile = ((Usersetup) si.readObject()).currentfile;
this.allconfigfile = ((Usersetup) si.readObject()).allconfigfile;
si.close();
} catch (Exception e) {
System.out.print("Reading Error123:" + e);
System.exit(1);
}
} else {
try {
FileOutputStream fo = new FileOutputStream(configfile);
ObjectOutputStream so = new ObjectOutputStream(fo);
so.writeObject(this);
so.close();
} catch (Exception e) {
System.out.println("Saving Error:" + e);
System.exit(1);
}
}
} public int getFileNumber() {
return (allconfigfile.size());
} public void print() {
int i;
for (i = 1; i < 10; i++) {
System.out.print("[" + i + "]");
if (i <= allconfigfile.size()) {
System.out.print(allconfigfile.elementAt(i));
}
System.out.println();
}
System.out.println("[0]返回");
}

解决方案 »

  1.   

    当输入过程中意外到达文件或流的末尾时,抛出java.io.EOFException异常
      

  2.   

    代码的动作如下:
    在没有这个文件,创建这个文件,并写一个对象(自己)到这个文件中。
    在有这个文件的时候,从文件读2个对象。
    =========
    你应该看出写入和读出不匹配(1!=2)
    你可以对加一个so.writeObject(this);或者少写一个readObject
      

  3.   

    package test;import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.ObjectInputStream;
    import java.io.ObjectOutputStream;
    import java.io.Serializable;
    import java.util.Vector;public class Test1 implements Serializable { private Vector allconfigfile = new Vector(); private String currentfile; public Test1() { } public void init() {
    File configfile = new File("d:\\1.txt");
    if (configfile.exists()) {
    try {
    FileInputStream fi = new FileInputStream(configfile);
    ObjectInputStream si = new ObjectInputStream(fi);
    Test1 temp=(Test1) si.readObject();
    this.currentfile = temp.currentfile;
    this.allconfigfile = temp.allconfigfile;
    si.close();
    } catch (Exception e) {
    System.out.print("Reading Error123:" + e);
    System.exit(1);
    }
    } else {
    try {
    FileOutputStream fo = new FileOutputStream(configfile);
    ObjectOutputStream so = new ObjectOutputStream(fo);
    so.writeObject(this);
    so.close();
    } catch (Exception e) {
    System.out.println("Saving Error:" + e);
    System.exit(1);
    }
    }
    } public int getFileNumber() {
    return (allconfigfile.size());
    } public void print() {
    int i;
    for (i = 1; i < 10; i++) {
    System.out.print("[" + i + "]");
    if (i <= allconfigfile.size()) {
    System.out.print(allconfigfile.elementAt(i));
    }
    System.out.println();
    }
    System.out.println("[0]返回");
    }

    public static void main(String[] args){
    Test1 t1=new Test1();
    t1.init();
    }
    }
    这样行了,楼上说的对,读对象的时候多读了一次
      

  4.   

    已解决,谢谢,我本来跟Areslp写的是一样的,后来出现一个local stream的错误,就把Test1 temp=(Test1) si.readObject();给去掉了,以为是这个引起的。多谢各位