Java IO流(下)
阿新 • • 發佈:2018-11-01
位元組流:
新建一個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();
}
}
}