1. 程式人生 > 其它 >1.1 練習案例:java物件流和檔案流的相互轉換

1.1 練習案例:java物件流和檔案流的相互轉換

技術標籤:JAVA之IO流

1.1 練習案例:java物件流和檔案流的相互轉換

1)將若干個Student物件,若干個Teacher物件,寫出到d:/0404/a.txt中
2)將該檔案中所有Student物件反序列化回來裝入List, 所有的Teacher物件反序列化回來轉入另外一個List

程式碼邏輯:建立一個Person類,並實現Serializable。再讓Student和Teacher類繼承Person。(當然這裡沒必要,可以直接建立Student和Teacher類)
運用知識點:物件流,檔案流

(1)Person類:

package Homework;

import java.io.
Serializable; public class Person implements Serializable { private static final long serialVersionUID = 1L; private String name; private String sex; private int age; public String getName() { return name; } public void setName(String name) { this.name = name;
} public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } @Override public String toString() { return
"Person [name=" + name + ", sex=" + sex + ", age=" + age + "]"; } public Person(String name, String sex, int age) { super(); this.name = name; this.sex = sex; this.age = age; } public Person() { super(); } }

(2)Student類:

package Homework;

public class Student extends Person {
    public Student(String name,String sex,int age){
        super(name, sex, age);
    }
    public Student(){}
    @Override
    public String toString() {
        return "Student [getName()=" + getName() + ", getSex()=" + getSex() + ", getAge()=" + getAge() + "]";
    }   
}

(3)Teacher類:

package Homework;

public class Teacher extends Person {
    public Teacher(String name,String sex,int age){
        super(name, sex, age);
    }
    public Teacher(){}
    @Override
    public String toString() {
        return "Teacher [getName()=" + getName() + ", getSex()=" + getSex() + ", getAge()=" + getAge() + "]";
    }
}

(4)測試類:

package Homework;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.ArrayList;

public class Test1and2 {

    public static void main(String[] args) {
        //在本工程下建立一個資料夾
        File file=new File("Instance");
        file.mkdirs();
        //在本工程下建立的資料夾下建立一個a.txt檔案,用來寫入物件
        File file2=new File(file,"a.txt");

        //使用物件流寫入物件
        ObjectOutputStream oos=null;
        ObjectInputStream ois=null;
        try {
            file2.createNewFile();

            //將若干個Student物件,若干個Teacher物件,寫入檔案中
            oos=new ObjectOutputStream(new FileOutputStream(file2));
            oos.writeObject(new Student("李四","男",20));
            oos.writeObject(new Student("李四2","男",45));
            oos.writeObject(new Student("李四3","男",38));
            oos.writeObject(new Teacher("張三","男",13));
            oos.writeObject(new Teacher("張三","男",50));
            oos.writeObject(new Teacher("張三","男",34));
            oos.flush();

            //將該檔案中所有Student物件反序列化回來裝入List
            ois=new ObjectInputStream(new FileInputStream(file2));
            ArrayList<Student> list=new ArrayList<>();
            ArrayList<Teacher> list2=new ArrayList<>();

            //將檔案中寫入的物件讀取出來,並轉為物件,存入對應的集合中
            for(int i=0;i<6;i++){
                if(i<=2){
                    Student student=(Student)ois.readObject();
                    list.add(student);
                }else {
                    Teacher teacher=(Teacher)ois.readObject();
                    list2.add(teacher);
                }
            }

            //遍歷打印出集合中的物件
            for (Student student : list) {
                System.out.println(student);
            }
            for (Teacher teacher : list2) {
                System.out.println(teacher);
            }


        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }finally {
            if(ois!=null){
                try {
                    ois.close();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
            if(oos!=null){
                try {
                    oos.close();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        }
    }
}

(5)結果

在這裡插入圖片描述