-1

Java プロジェクト用のオブジェクト ファイルを実装する必要がありますが、ファイルのロードに関して問題があります (保存はすべて問題ありません)。

public static void loadStudentList() {
    boolean endOfFile = false;

    try {
        // create a FileInputStream object, studentFile
        FileInputStream studentFile = new FileInputStream("Students.obf");
        // create am ObjectImnputStream object to wrap around studentStream
        ObjectInputStream studentStream = new ObjectInputStream(studentFile) ;

        // read the first (whole) object with the readObject method
        Student tempStudent = (Student) studentStream.readObject();
        while (endOfFile != true) {
            try {
                tempStudent = (Student) studentStream.readObject();
                stud1.add(tempStudent);
            }
            catch(EOFException e) {
                endOfFile = true;
            }
        }
        studentStream.close();
        //use the fact that the readObject throws an EOFException to check whether the end of eth file has been reached
    }
    catch(FileNotFoundException e) {
        System.out.println("File not found");
    }

    catch(ClassNotFoundException e) {  // thrown by readObject
    /* which indicates that the object just read does not correspond to any class
known to the program */
        System.out.println("Trying to read an object of an unkonown class");
    }
    catch(StreamCorruptedException e) { //thrown by constructor
    // which indicates that the input stream given to it was not produced by an ObjectOutputStream object
        System.out.println("Unreadable File Format");
    }
    catch(IOException e) {
        System.out.println("There was a problem reading the file");
    }
}

これは、ファイルをロードするために使用したコードです。プログラムは、ファイルの最後の 2 つのレコードのみをロードします。アイデアは、プログラムで将来使用するために、それらすべてを配列リストにロードすることです。また、私は自分のキャッチを取り戻していません。何か助けはありますか?ありがとう :)

4

2 に答える 2

0

ArrayList<Type>オブジェクトを に追加してから、それらをファイルに書き込み/シリアル化し、それを読み取り/逆シリアル化するために、データを 1 つに読み込んでみませんかArrayList<Type>

次に、ArrayList からオブジェクトを 1 つずつ取得できます。

これは、トラブルのない簡単な方法かもしれません。

  //Serialize
  ArrayList<Student> students = new ArrayList<Student>();
  //Add the student objects to the array list
  File f = new File("FileName.ser");
  ObjectOutputStream objOut = new ObjectOutputStream(new FileOutputStream(f));
  objOut.writeObject(students);

   //Deserialize
   ArrayList<Student> students = new ArrayList<Student>();
   ObjectInputStream objIn = new ObjectInputStream(new FileInputStream(new File("FileName.ser")));
   students = (ArrayList<String>) objIn.readObject();
于 2013-01-24T07:56:23.367 に答える
0

最初に読んだ生徒をリストに追加することはありません

Student tempStudent = (Student) studentStream.readObject();
         while (endOfFile != true)
        {
            try
            {

                 tempStudent = (Student) studentStream.readObject();
                 stud1.add(tempStudent);
            }

以下のコードのように、しばらく前に読み取りを削除します

     while (endOfFile != true)
    {
        try
        {

             Student tempStudent = (Student) studentStream.readObject();
             stud1.add(tempStudent);
        }

これで問題が解決するかどうかわかりません

于 2013-01-24T08:00:33.027 に答える