Search code examples
javafilearraylistobjectinputstreamreadfile

Loading From File Error In Java?


I have to implement Object Files for a java project, however I am having trouble when it comes to loading the file (Save is all OK)

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

This is the code I used to load the files. The program will load ONLY the last 2 records in my file. The Idea is that I load all of them to an array list for future use in the program. Also I am not getting any of my catches back. Any help? Thanks :)


Solution

  • You never add to the list the first Student that you read

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

    Remove the read before the while, like the code below

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

    I am not sure if this will solve your problem