Java 如何使用序列化从txt.datei加载多个对象实例
你好,这是我的第一个问题 我创建了一个名为Person和SubObjekts Professor and Student的对象 现在,我正试图将我从它们创建的所有实例保存在一个.txt文件中,然后再次加载它们。 所以我成功地保存了,我亲自创建了一个静态ArrayList,每次有人被创建时,他们都会通过构造函数进入这个列表。之后,我将列表保存在.txt文件中 现在的问题是如何再次加载此列表并使用实例Java 如何使用序列化从txt.datei加载多个对象实例,java,oop,arraylist,serialization,deserialization,Java,Oop,Arraylist,Serialization,Deserialization,你好,这是我的第一个问题 我创建了一个名为Person和SubObjekts Professor and Student的对象 现在,我正试图将我从它们创建的所有实例保存在一个.txt文件中,然后再次加载它们。 所以我成功地保存了,我亲自创建了一个静态ArrayList,每次有人被创建时,他们都会通过构造函数进入这个列表。之后,我将列表保存在.txt文件中 现在的问题是如何再次加载此列表并使用实例 public static void save() { try
public static void save() {
try {
File datei = new File("C:\\Users\\...");
datei.createNewFile();
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(datei));
oos.writeObject(Person.PersonListe);
oos.flush();
oos.close();
System.out.println("Die datei wurde gesichert");
}catch(Exception e) {
e.printStackTrace();
System.out.println("Die datei wurde nicht gesichert");
}
}
当我第一次尝试保存一个对象,然后再次加载它时,我尝试了类似的方法,但没有成功
public static void load() {
try {
File datei = new File("C:\\Users.....");
ObjectInputStream ois = new ObjectInputStream(new FileInputStream(datei));
Object rawObject = ois.readObject();
if(rawObject instanceof Person) {
Person P1 = (Person)rawObject;
System.out.println(P1.vorname + " " + P1.nachname);
ois.close();
System.out.println("Inhalt wurde geladen");
}else {
System.out.println("Kein Inhalt gefunden");
}
}catch(Exception e) {
e.printStackTrace();
}
}
剩下要说的是,这是一个类项目,我没有使用MYSQL和数据库的经验,所以我没有使用它们。如果我理解正确,您希望序列化
数组列表中的所有对象。
然后,您可以简单地序列化整个列表,因为默认情况下,
ArrayList
实现了Serializable
。是的,但我还想再次加载保存在文本文件中的数据,以便我可以更改名称。好的,我找到了答案,我确实以错误的方式处理了它。就像我将它保存在一个数组中,并希望它加载引用,但我只需要将数据加载到一个数组中。多么愚蠢的错误啊,反正你解决了。无论如何,我建议您序列化整个ArrayList
,因为它应该比序列化列表本身的每个元素更简单。序列化使用二进制格式,因此您不应该使用.txt
后缀。此外,您应该使用System.getProperty(“user.home”)
而不是硬编码路径。当您想使用当前目录时,也可以使用System.getProperty(“user.dir”)
,但也可以通过使用相对路径来实现。也值得一读:…“它没用”不是一个问题描述。createNewFile()
行是冗余的和浪费的。它强制删除任何现有文件,然后创建一个新文件,然后当操作系统获得新文件输出流(…)的本机部分时,它必须重新执行完全相同的操作。不要写无意义的代码。