Java对象流
1 package org.java; 2 3 import java.io.File; 4 import java.io.FileInputStream; 5 import java.io.FileOutputStream; 6 import java.io.IOException; 7 import java.io.ObjectInputStream; 8 import java.io.ObjectOutputStream; 9 import java.io.Serializable; 10 /* 11 ObjectOutputStream:对象输入流 12 ObjectInputStream:对象输出流 13 分别是 InputStream和OutputStream的子类 14 构造方法 15 ObjectOutputStream(OutputStream out); 16 ObjectInputStream(InputStream in); 17 先用InputStream的子类 创建一个 流对象(如:fileInputStream),然后 用ObjectInputStream(fileInputStream)接收参数 创建对象流 18 注意:对象实现Serializable接口-- 即:implements Serializable 就可以了 19 使用 20 writeObject(Object object);//将对象 写入文件中 21 readObject();//读取一个文件到程序中-->需要强制类型转换成 自定的对象 22 23 */ 24 public class Object { 25 26 public static void main(String[] args) { 27 /* 28 * 定义一个Student类,里面含name、age属性; 29 * 定义一个测试类,创建一个Student数组,数组中的Student对象赋初值, 30 * 将数组中的各个Student对象的内容输出到student.txt文件中; 31 * 然后将文件中的内容读出并在显示器中显示出来。 32 * 33 */ 34 //ObjectOutputStream是对Java对象进行序列号处理,处理后的数据,不是文本数据,所以该数据保存到txt中,必然是乱码。 35 //创建一个Student数组,数组中的Student对象赋初值, 36 Student[] students=new Student[5]; 37 for(int i=0;i<5;i++) { 38 students[i]=new Student("名字Jack"+i, 20+i); 39 } 40 try { 41 // 将数组中的各个Student对象的内容输出到student.txt文件中; 42 //需要在try-catch语句中 43 String path="C:\\Users\\Nirobert Einteson\\Desktop\\java\\File\\";//文件的所在的目录 44 File studentFile=new File(path+"student.txt"); 45 46 FileOutputStream fileOutputStream=new FileOutputStream(studentFile); 47 ObjectOutputStream objectOutputStream=new ObjectOutputStream(fileOutputStream);//源 是fileOutputStream 48 for(Student student:students) { 49 //System.out.println(student); 50 objectOutputStream.writeObject(student); 51 } 52 objectOutputStream.writeObject(null);//写入空,判断 是否到达末尾了 53 objectOutputStream.flush();//清空缓冲区 54 objectOutputStream.close();//先关闭增强型的 对象流 55 fileOutputStream.close();//然后再关闭 字节型 流 56 57 //关闭 写的文件之后,才能读文件; 58 //然后将文件中的内容读出并在显示器中显示出来。 59 FileInputStream fileInputStream=new FileInputStream(studentFile);//读取这个文件,先变成字节流文件 60 ObjectInputStream objectInputStream=new ObjectInputStream(fileInputStream);//字节流文件 作为 源 61 Student student;//需要强制类型转换(Student)objectInputStream.readObject(); 62 while((student=(Student)objectInputStream.readObject())!=null) {//引用型,为空返回值是null//如果不是没有加入null的话,容易抛出异常; 63 System.out.println(student); 64 } 65 objectInputStream.close(); 66 fileInputStream.close(); 67 68 }catch (Exception e) { 69 System.out.println(e); 70 } 71 } 72 73 }
1 package org.java; 2 3 import java.io.Serializable; 4 5 public class Student implements Serializable{ 6 String name; 7 int age; 8 public Student() { 9 10 } 11 public Student(String name,int age) { 12 this.name=name; 13 this.age=age; 14 } 15 @Override 16 public String toString() { 17 return "Student [name=" + name + ", age=" + age + "]"; 18 } 19 20 }
1 Student [name=名字Jack0, age=20] 2 Student [name=名字Jack1, age=21] 3 Student [name=名字Jack2, age=22] 4 Student [name=名字Jack3, age=23] 5 Student [name=名字Jack4, age=24]