1. 程式人生 > >Java IO流(下)

Java IO流(下)

位元組流:

新建一個Student類:


import java.io.Serializable;


//Serializable 介面中沒有任何方法需要實現,它就是一個標誌
//表示這個類的物件可以進行序列化和反序列化的操作
//序列化:Java物件轉化為byte[]陣列(二進位制資料)
//反序列化:二進位制資料還原為Java物件
//儲存資料的時候進行序列化操作,把Java物件轉化為二進位制資料儲存到硬碟
//讀取資料的時候進行反序列化操作,把硬盤裡的
public class Student implements Serializable{
    private int number;
    private
String name; private int score; public Student() { super(); } public Student(int number, String name, int score) { super(); this.number = number; this.name = name; this.score = score; } public int getNumber() { return number; } public
void setNumber(int number) { this.number = number; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getScore() { return score; } public void setScore(int score) { this
.score = score; } }

控制資料寫入:

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.util.ArrayList;

public class Application {

    public static void main(String[] args) {
        // 使用位元組流完成物件的讀寫操作

        /*
         * 位元組流:InputStream 和 OutputStream 兩個抽象類是所有位元組輸入輸出流的父類
         * 比較常用的子類有:
         *      FileInputStream 和FileOutputStream 讀寫檔案內容(圖片、視訊、音訊...)
         *      使用和字元流一樣,只是用byte[]裝載資料
         * ObjectInputStream 和 Object FileOutputStream  讀寫Java物件(Student,People...)
         */


        Student s1 = new Student(10010, "張三", 99);

        //想要把s1 儲存到硬碟上,需要一以下幾步
        /*
         * 1、Student 類 實現 Serializable 介面
         * 2、使用ObjectInnputStream儲存Student 類物件
         */

        try {

            //把s1 儲存到 333.dat檔案中,這個檔案系統會自動建立
            FileOutputStream fos = new FileOutputStream("S:/333.dat");

            //根據fos 建立用於儲存物件的輸出流oos
            ObjectOutputStream oos = new ObjectOutputStream(fos);

            //儲存s1到硬碟
            oos.writeObject(s1);

            //關閉流 哪個最後建立先關哪個
            oos.close();
            fos.close();
        } catch (IOException e) {//修改IO異常 導包

            e.printStackTrace();
        }

        //如果需要儲存多個物件,可以把多個物件放入集合中,把集合儲存到硬碟上
        Student s2 = new Student(10011,"lisi",90);
        Student s3 = new Student(10012,"liuliu",80);
        Student s4 = new Student(10013,"ergou",92);

        ArrayList<Student> students = new ArrayList<>();
        students.add(s2);
        students.add(s3);
        students.add(s4);

        try {
            FileOutputStream fos2 = new FileOutputStream("S:/666.txt");

            ObjectOutputStream oos2 = new ObjectOutputStream(fos2);

            //把集合儲存到硬碟上
            oos2.writeObject(students);

            oos2.close();
            fos2.close();

        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }


    }

}

讀取資料:

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.util.ArrayList;

public class Application2 {

    public static void main(String[] args) {

        //使用Object Input Stream 來讀取硬碟上儲存的Java物件

        try {
            FileInputStream fis = new FileInputStream("S:/333.dat");
            ObjectInputStream ois = new ObjectInputStream(fis);

            //讀取儲存的Java物件
            Student s1 = (Student) ois.readObject();

            System.out.println(s1.getNumber() + " " + s1.getName() + " " + s1.getScore());

            ois.close();
            fis.close();

        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        //讀取集合
        try {
            FileInputStream fis2 = new FileInputStream("S:/666.txt");
            ObjectInputStream ois2 = new ObjectInputStream(fis2);

            //強制轉化時需要注意:存的是什麼,取出來就是什麼
            ArrayList<Student> students = (ArrayList<Student>) ois2.readObject();

            for (Student student : students) {
                System.out.println(student.getNumber() + " " +student.getName() + " " + student.getScore());
            }

            //關流
            ois2.close();
            fis2.close();

        } catch (ClassNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } 

    }

}