如何从文本文件向父类类型的数组列表添加不同的子类对象类型?

时间:2019-04-19 20:46:17

标签: java object arraylist serialization file-io

我被分配了一个创建带有多个扩展类(经理,受薪雇员等)的Employee父类的作业,我已经完成了作业,但是,我想看看是否可以更进一步并尝试阅读和添加对象保存到具有不同对象类型的文本文件中,这样我就可以保存从程序上次运行以来创建的对象。与从文本文件读取相同类型的对象相比,这被证明有些棘手,因为从雇员父类扩展的经理,领薪雇员和按小时雇员类具有不同的构造函数参数。我做了一些研究,发现了序列化,但还是有点困惑。

当前的构造函数是: -员工(字符串名称,字符串标题,整数ID) -经理(字符串名称,字符串标题,整数ID,双倍薪水,双倍奖金) -SalariedEmployee(字符串名称,字符串标题,整数ID,双倍薪水) -HourlyEmployee(字符串名称,字符串标题,整数ID,双倍工资,双倍
  小时)

我想从以下位置读取并初始化ArrayList的文本文件的示例:

Morgan Lee;经理; 109; 120000; 20

Harry N;受薪雇员; 110; 89000

李安(Lee Ann M);每小时员工; 111; 18; 40

回顾:我想读取不同的对象类型并将其从文本文件添加到ArrayList中。我已经设法将它们写入文本文件,但我确实需要帮助阅读它们!

ps。当我去检查文本文件时,我写了初始化的对象,我看到的是:“��srjava.lang.Integer⠤���8Ivaluexrjava.lang.Number������xpsq〜sq〜”

我过去通过解析信息并将其放置到每行的String数组中,使用PrintWriter和File在文本文件中读写单个对象类型。现在,我使用序列化实现只是为了意识到我实际上无法在文本文件中读取或添加对象。

public static void main(String[] args) throws FileNotFoundException
   {       
       Scanner in = new Scanner (System.in);
       ArrayList<Employee> list = new ArrayList<Employee>();
       String name, title;
       int id, choice, choice2 = 0;
       double wage=0, hours=0, salary=0,bonus=0;
       boolean another = false;
       boolean found = false;
       boolean flag = false;

       list.add(new Manager("Morgan Lin", "Manager",105,120000,20));
       list.add(new Manager("Al Mar", "Manager",102,220000,20));
       list.add(new SalariedEmployee("Harry Morgan", "Salaried Employee",101,89000));

       try {
           FileOutputStream fo = new FileOutputStream (new File ("myObjects.txt"));
           ObjectOutputStream o = new ObjectOutputStream(fo);
           for(int i = 0; i<list.size();i++) {
           o.writeObject(i);
           }
           o.close();
           fo.close();


       } catch (FileNotFoundException e) {
            System.out.println("File not found");
        } catch (IOException e) {
            System.out.println("Error initializing stream");
        }

我想在myObjects.txt中添加如下内容:

摩根林;经理; 105; 120000; 20

Al Mar;经理; 102; 220000; 20 哈里·摩根;有薪员工; 101; 89000

无需先在我的代码中将对象初始化为ArrayList。

0 个答案:

没有答案