Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 自定义类的ArrayList未正确保存到文件中?_Java_File_Arraylist_Serialization_Fileinputstream - Fatal编程技术网

Java 自定义类的ArrayList未正确保存到文件中?

Java 自定义类的ArrayList未正确保存到文件中?,java,file,arraylist,serialization,fileinputstream,Java,File,Arraylist,Serialization,Fileinputstream,我计划用Java编写一个项目,该项目获得3个字符串的输入,并将它们保存到一个Student对象中,该对象将保存到Student类型的ArrayList 添加固定数量的学生对象(ID为0时,学生的输入将被中断)后,我需要将此ArrayList保存到文件中,稍后再读取 问题是,我认为我能够成功地使用序列化将这个ArrayList保存到一个文件中,但是我似乎无法正确地打印我从先前创建的文件中获得的ArrayList(是的,我覆盖了toString方法),因为打印时我从控制台获得的所有信息都是这样的(我

我计划用Java编写一个项目,该项目获得3个字符串的输入,并将它们保存到一个Student对象中,该对象将保存到Student类型的ArrayList

添加固定数量的学生对象(ID为0时,学生的输入将被中断)后,我需要将此ArrayList保存到文件中,稍后再读取

问题是,我认为我能够成功地使用序列化将这个ArrayList保存到一个文件中,但是我似乎无法正确地打印我从先前创建的文件中获得的ArrayList(是的,我覆盖了toString方法),因为打印时我从控制台获得的所有信息都是这样的(我增加了2名学生):

这里我留下一些代码供你们检查

事先非常感谢你

Main.java

public class Main {

    public static void main(String[] args) throws ClassNotFoundException {

        Student.insert();

        Student.print();

    }

}
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Scanner;

public class Student implements Serializable {

    private int ID;
    private String surname;
    private String name;

    public Studente (int ma, String su, String na) {
        ma = ID;
        su = surname;
        na = name;
    }

    public static void insert() {

        ArrayList<Student> students_array = new ArrayList<Student>();

        Scanner input = new Scanner(System.in);
        Scanner input2 = new Scanner(System.in);
        Scanner input3 = new Scanner(System.in);

        int m = 1;
        String n;
        String c;

        while (m != 0) {

            System.out.printf("\nInput ID: ");  
            m = input.nextInt();

            if (m == 0) {
                break;
            }

            else {

                System.out.printf("\nInput name: ");            
                n = input2.nextLine();

                System.out.printf("\nInput surname: ");
                c = input3.nextLine();

                student_array.add(new Student(m, n, c));

            }
        }

        try {


            FileOutputStream fileOutput = new FileOutputStream("Person.dat");


            ObjectOutputStream StreamOutput = new ObjectOutputStream(fileOutput);


            StreamOutput.writeObject(students_array);

            StreamOutput.close();

            System.out.println("Object successfully serialized.\n");

        } catch (IOException ex) {
            ex.printStackTrace();
        }


    }

    public static void print() throws ClassnotFoundException {

        try {

            FileInputStream fileInput = new FileInputStream("Person.dat");

            ObjectInputStream StreamInput = new ObjectInputStream(fileInput);

            while (fileInput.available() > 0) {

                ArrayList<Student> e = (ArrayList<Student>) StreamInput.readObject();

                System.out.println(e);

            }

        } catch (IOException ex) {
            ex.printStackTrace();
        }

    }

    @Override
    public String toString() {
        return "Name: " + name + "\nSurname: " + surname + "\nID: " + ID + "\n\n";
    }

}
Student.java

public class Main {

    public static void main(String[] args) throws ClassNotFoundException {

        Student.insert();

        Student.print();

    }

}
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Scanner;

public class Student implements Serializable {

    private int ID;
    private String surname;
    private String name;

    public Studente (int ma, String su, String na) {
        ma = ID;
        su = surname;
        na = name;
    }

    public static void insert() {

        ArrayList<Student> students_array = new ArrayList<Student>();

        Scanner input = new Scanner(System.in);
        Scanner input2 = new Scanner(System.in);
        Scanner input3 = new Scanner(System.in);

        int m = 1;
        String n;
        String c;

        while (m != 0) {

            System.out.printf("\nInput ID: ");  
            m = input.nextInt();

            if (m == 0) {
                break;
            }

            else {

                System.out.printf("\nInput name: ");            
                n = input2.nextLine();

                System.out.printf("\nInput surname: ");
                c = input3.nextLine();

                student_array.add(new Student(m, n, c));

            }
        }

        try {


            FileOutputStream fileOutput = new FileOutputStream("Person.dat");


            ObjectOutputStream StreamOutput = new ObjectOutputStream(fileOutput);


            StreamOutput.writeObject(students_array);

            StreamOutput.close();

            System.out.println("Object successfully serialized.\n");

        } catch (IOException ex) {
            ex.printStackTrace();
        }


    }

    public static void print() throws ClassnotFoundException {

        try {

            FileInputStream fileInput = new FileInputStream("Person.dat");

            ObjectInputStream StreamInput = new ObjectInputStream(fileInput);

            while (fileInput.available() > 0) {

                ArrayList<Student> e = (ArrayList<Student>) StreamInput.readObject();

                System.out.println(e);

            }

        } catch (IOException ex) {
            ex.printStackTrace();
        }

    }

    @Override
    public String toString() {
        return "Name: " + name + "\nSurname: " + surname + "\nID: " + ID + "\n\n";
    }

}
import java.io.FileInputStream;
导入java.io.FileOutputStream;
导入java.io.IOException;
导入java.io.ObjectInputStream;
导入java.io.ObjectOutputStream;
导入java.io.Serializable;
导入java.util.ArrayList;
导入java.util.Scanner;
公共类学生实现可序列化{
私有int-ID;
私家姓;
私有字符串名称;
公立学生(硕士、硕士、硕士、硕士){
ma=ID;
苏=姓氏;
na=名称;
}
公共静态void insert(){
ArrayList students_array=新建ArrayList();
扫描仪输入=新扫描仪(System.in);
扫描仪输入2=新扫描仪(System.in);
扫描仪输入3=新扫描仪(System.in);
int m=1;
字符串n;
字符串c;
而(m!=0){
System.out.printf(“\n输入ID:”);
m=输入.nextInt();
如果(m==0){
打破
}
否则{
System.out.printf(“\n输入名称:”);
n=input2.nextLine();
System.out.printf(“\n输入姓氏:”);
c=input3.nextLine();
student_数组.add(新student(m,n,c));
}
}
试一试{
FileOutputStream fileOutput=新的FileOutputStream(“Person.dat”);
ObjectOutputStreamOutput=新的ObjectOutputStream(fileOutput);
StreamOutput.writeObject(学生数组);
StreamOutput.close();
System.out.println(“对象已成功序列化。\n”);
}捕获(IOEX异常){
例如printStackTrace();
}
}
public static void print()引发ClassnotFoundException{
试一试{
FileInputStream fileInput=新的FileInputStream(“Person.dat”);
ObjectInputStreamInput=新的ObjectInputStream(fileInput);
while(fileInput.available()>0){
ArrayList e=(ArrayList)StreamInput.readObject();
系统输出打印ln(e);
}
}捕获(IOEX异常){
例如printStackTrace();
}
}
@凌驾
公共字符串toString(){
返回“Name:+Name+”\n用户名:+Name+”\nID:+ID+“\n\n”;
}
}

你的构造函数应该命名为
Student
,而不是
Studente
,你应该从参数分配到字段,而不是相反。不是
ma=ID
,而是
ID=ma
,等等。很抱歉。我在从意大利语翻译成英语的过程中错过了这一点。这真是个愚蠢的错误,谢谢你先生,你知道我可以在ArrayList中使用迭代器进行迭代吗?这可能是老师想要的,所以。。