Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.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 如何使用序列化从txt.datei加载多个对象实例_Java_Oop_Arraylist_Serialization_Deserialization - Fatal编程技术网

Java 如何使用序列化从txt.datei加载多个对象实例

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

你好,这是我的第一个问题

我创建了一个名为Person和SubObjekts Professor and Student的对象

现在,我正试图将我从它们创建的所有实例保存在一个.txt文件中,然后再次加载它们。 所以我成功地保存了,我亲自创建了一个静态ArrayList,每次有人被创建时,他们都会通过构造函数进入这个列表。之后,我将列表保存在.txt文件中

现在的问题是如何再次加载此列表并使用实例

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()
行是冗余的和浪费的。它强制删除任何现有文件,然后创建一个新文件,然后当操作系统获得新文件输出流(…)的本机部分时,它必须重新执行完全相同的操作。不要写无意义的代码。