-3

こんにちは皆さん、私はオブジェクトファイルをプログラムに実装したばかりで、常にエラーが発生しています(ファイルの読み取りエラーとファイルへの書き込みの問題)。どちらも機能しません。

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.util.*;


public class Stores implements Serializable
{
    public static ArrayList<Student> stud1 = new ArrayList<Student>();
    public static ArrayList<SubjectTeacher> sTeach1 = new ArrayList<SubjectTeacher>();
    private static int iT = 0;
    private static int iS = 0;


    public static void savet (ArrayList<SubjectTeacher> teachIn, int count)
        {
            iT = count;
            sTeach1 = teachIn;
            saveTeachToFile();
        }

    public static void saves (ArrayList<Student> studIn, int count)
        {
            iS = count;
            stud1 = studIn;
            saveStudToFile();
        }

    public static ArrayList<Student> getStud ()
        {
            return stud1;
        }

    public static ArrayList<SubjectTeacher> getTeach ()
        {
            return sTeach1;
        }

    public static int getStudSize()
        {
            return stud1.size();
        }

    public static int getTeachSize()
        {
            return sTeach1.size();
        }

    private static void saveStudToFile()
    {
        try
        {
            // create a FileOutputStream object which will handles the writing of the sudent list of objects to the file.
            FileOutputStream studentFile = new FileOutputStream("Students.obf");
            // the OutputObjectStream object will allow us to write whole objects to and from files
            ObjectOutputStream studentStream = new ObjectOutputStream(studentFile);

            for(Student item: stud1)    // enhanced for loop
            // Loop through the list of studentsListIn and for each of these objects, wite them to the file
            {
                studentStream.writeObject(item);
            }
            //close the file so that it is no longer accessible to the program
            studentStream.close();
        }

        catch(IOException e)
        {
            System.out.println("There was a problem writing the File");
        }
    }

    private static void saveTeachToFile()
    {
        try
        {
            FileOutputStream teacherFile = new FileOutputStream("Teacher.obf");
            ObjectOutputStream teacherStream = new ObjectOutputStream(teacherFile);

            for(SubjectTeacher item1: sTeach1)  // enhanced for loop
            {
               teacherStream.writeObject(item1);
            }
            //close the file so that it is no longer accessible to the program
            teacherStream.close();
        }

        catch(IOException e)
        {
            System.out.println("There was a problem writing the File");
        }
    }

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

        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
            tempStudent = (Student) studentStream.readObject();

            while (endOfFile != true)
            {
                try
                {
                    stud1.add(tempStudent);
                    // read the next (whole) object
                    tempStudent = (Student) studentStream.readObject();
                }

                //use the fact that the readObject throws an EOFException to check whether the end of eth file has been reached
                catch(EOFException e)
                {
                    endOfFile = true;
                }

                studentStream.close();
            }
        }
        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");
        }
    }

    public static void loadTeacherList()
    {
        boolean endOfFile = false;
        SubjectTeacher tempTeacher;

        try
        {

            FileInputStream teacherFile = new FileInputStream("Teacher.obf");

            ObjectInputStream teacherStream = new ObjectInputStream(teacherFile) ;


            tempTeacher = (SubjectTeacher) teacherStream.readObject();

            while (endOfFile != true)
            {
                try
                {
                    sTeach1.add(tempTeacher);
                    // read the next (whole) object
                    tempTeacher = (SubjectTeacher) teacherStream.readObject();
                }

                //use the fact that the readObject throws an EOFException to check whether the end of eth file has been reached
                catch(EOFException e)
                {
                    endOfFile = true;
                }

                teacherStream.close();
            }
        }
        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");
        }
    }


}
4

1 に答える 1

1

まず、質問が閉じられないように、正しいコードで質問を編集する必要があります。第二に、いくつかのことが起こっている可能性があります。

  1. ファイルに書き込んでいるクラスはシリアライズできません
  2. ファイルは何らかの形で読み取り専用または書き込み保護されています

更新された質問のコードに基づいて、どのクラスを実装する必要があるか混乱しているようですSerializable。実装する必要があるクラスは、実際にファイルに書き込んでいるクラスです (つまりSubjectTeacher、 など)。

この2つをチェックして、見つけたものを教えてください。

また、コードをステップ実行して、実行時に例外がどのように見えるかを確認することをお勧めします。何が起こっているのかをよりよく理解できます。

于 2012-12-20T20:22:18.113 に答える