Java 自定义类的ArrayList未正确保存到文件中?
我计划用Java编写一个项目,该项目获得3个字符串的输入,并将它们保存到一个Student对象中,该对象将保存到Student类型的ArrayList 添加固定数量的学生对象(ID为0时,学生的输入将被中断)后,我需要将此ArrayList保存到文件中,稍后再读取 问题是,我认为我能够成功地使用序列化将这个ArrayList保存到一个文件中,但是我似乎无法正确地打印我从先前创建的文件中获得的ArrayList(是的,我覆盖了toString方法),因为打印时我从控制台获得的所有信息都是这样的(我增加了2名学生): 这里我留下一些代码供你们检查 事先非常感谢你 Main.javaJava 自定义类的ArrayList未正确保存到文件中?,java,file,arraylist,serialization,fileinputstream,Java,File,Arraylist,Serialization,Fileinputstream,我计划用Java编写一个项目,该项目获得3个字符串的输入,并将它们保存到一个Student对象中,该对象将保存到Student类型的ArrayList 添加固定数量的学生对象(ID为0时,学生的输入将被中断)后,我需要将此ArrayList保存到文件中,稍后再读取 问题是,我认为我能够成功地使用序列化将这个ArrayList保存到一个文件中,但是我似乎无法正确地打印我从先前创建的文件中获得的ArrayList(是的,我覆盖了toString方法),因为打印时我从控制台获得的所有信息都是这样的(我
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中使用迭代器进行迭代吗?这可能是老师想要的,所以。。