当前位置: 首页 > 知识库问答 >
问题:

我们可以将同一父类的不同类型的子类读/写到文本文件中吗?

柳韬
2023-03-14

假设我有一个抽象类“车辆”和另外两个继承自名为“汽车”和“自行车”的车辆类的子类。

所以我可以随机创建一系列汽车和自行车对象:

Vehicle car = new Car();
Vehicle bike = new Bike();

并将它们全部添加到Arraylist:

Arraylist<Vehicle> vehicles = new Arraylist<>();

是否有可能将这些对象写入单个文本文件,并根据特定的对象类型(汽车、自行车)从文本文件读取回Arraylist,而无需为每种类型维护不同的文本文件

共有2个答案

颜德馨
2023-03-14

如果抽象类实现了可序列化接口,那么实际上也可以序列化子类。

因此,通过使vehicle类可序列化,您可以迭代数组列表,并使用ObjectOutputStreamFileOutputStream来序列化子对象。

参考:https://www.geeksforgeeks.org/object-serialization-inheritance-java/

闻人栋
2023-03-14

如果您想在文件中存储对象,我建议您使用对象序列化。此链接提供了有关如何序列化和反序列化列表的有用详细信息

以下是序列化列表的方式:

ArrayList<Vehicle> vehicles= new ArrayList<>();
         
        vehicles.add(new Vehicle());
        vehicles.add(new Bike());
        vehicles.add(new Car());
 
        try
        {
            FileOutputStream fos = new FileOutputStream("vehiclesData");
            ObjectOutputStream oos = new ObjectOutputStream(fos);
            oos.writeObject(vehicles);
            oos.close();
            fos.close();
        } 
        catch (IOException ioe) 
        {
            ioe.printStackTrace();
        }

要反序列化,请使用以下内容:


        ArrayList<Vehicle> vehicles= new ArrayList<>();
         
        try
        {
            FileInputStream fis = new FileInputStream("vehiclesData");
            ObjectInputStream ois = new ObjectInputStream(fis);
 
            vehicles= (ArrayList) ois.readObject();
 
            ois.close();
            fis.close();
        } 
        catch (IOException ioe) 
        {
            ioe.printStackTrace();
            return;
        } 
        catch (ClassNotFoundException c) 
        {
            System.out.println("Class not found");
            c.printStackTrace();
            return;
        }
         
        //Verify list data
        for (Vehicle vehicle : vehicles) {
            System.out.println(vehicle);
        }

确保所有的类都实现了可序列化的接口

 类似资料:
  • 问题内容: 说我有以下numpy结构化数组: 我想 将其保存到文本文件中的单个空格或制表符分隔的行中 。如果数组都是相同的类型,我可以使用。但是,这似乎不喜欢混合数据类型/结构化数组,例如: 给出此错误: 任何人都可以推荐这样做的方法吗? 问题答案: 编辑 :无论出于什么原因,我似乎都无法单独回答这个问题,因此这是一个更清洁的版本,它不需要使用模块。记录下来,@ askewchan的答案还是更好!

  • 我正在编写一个使用Kafka流的应用程序。它从主题A读取,进行一些转换,然后写入主题B。在转换期间,值按键分组,因此输出键、值类型不同于输入值类型。Kafka流使用特定类型的Serdes(例如String serdes序列化和反序列化字符串)进行序列化和反序列化,因此在数据转换后它将无法工作。如何在Streams API中定义不同的序列化器和反序列化器?

  • 我是一个编程初学者,我需要一些帮助,试图从文本文件读取到包含不同类型对象的ArrayList。我已经创建了一个控制视频目录的程序,我目前已经硬编码到程序中的ArrayList中,但我想改变这一点,所以每次程序运行时,程序都从包含目录的文本文件中读取,并将其转换为ArrayList,而不是从已经在程序中的ArrayList中读取。我已经添加了一个函数,一旦程序退出,它就会将清单写入文本文件,但我似乎

  • 我有一个这样的 txt 文件 163钱滴24 454快乐112 45 没有你什么都没有 56 第一个数字是歌曲的id,我想将其存储为整数,第二个数字是字符串!这不是一个词!第三个是整数,它是歌曲的点赞数。我想将它们存储在一个数组中,但当我使用scanner方法时,我会逐字存储它们,当歌曲有名字时 有什么方法可以读取 txt 文件,将第一个数字存储为 int,然后扫描整个字符串(歌曲名称),直到下一

  • 我是C语言的新手,正在寻找关于以下问题的建议。我正试图创建一个程序,生成树的形状(是的,真正的树)。这些形状完全由树枝构成。为此,我开始编写一个名为Branch的类。主要的想法是。cpp I创建一个类Branch的实例,它本身将创建Branch的实例。这适用于迭代。 目前,该计划的结构如下: main.cpp: 树枝h: 树枝cpp: 现在,这个程序可以工作,但是我想通过将每个对象存储在一个向量中

  • 在上一节中,我们使用Python和XlsxWriter模块创建了一个设置了简单格式的电子表格。 这次,我们继续扩展要写入的数据,在其中添加一些日期: expenses = ( ['Rent', '2013-01-13', 1000], ['Gas', '2013-01-14', 100], ['Food', '2013-01-16', 300], ['Gym'