Javase的文件与流简介
一、 文件管理的概述
1、Java中的对文件的管理,通过java.io包中的File类实现
2、Java中文件的管理,主要针对文件或目录路径名的管理
文件的属性信息、文件的检查、文件的删除、不包括文件的访问。
二、 流的概念及API
1、流(stream)的概念代表的是程序中数据的流通
2、数据流是一串连续不断的数据的集合,
3、在java程序中,从输入流读取数据(读到内存中),而从输出流输出数据(从内存存储到文件或显示到屏幕上)
三、 流的概念
1、 按流的方向不同:输入流、输出流
2、 按处理数据的单位不同:字节流、字符流
3、 按功能不同:节点流、处理流
四、对象序列化概述
1、通过使用ObjectinputStream和ObjectoutputStream类保存和读取对象的机制叫做序列化机制
2、对象序列化是指对象转化为字节序列的过程
3、反序列化则是根据字节序列恢复对象的过程
4、序列化一般用于以下场景
永久性保存对象,保存对象的字节序列到本地文件中
通过序列化对象在网络中传递对象
通过序列化在进程间传递对象
五、 对象序列化条件
1、 该对象类必须实现Serializable接口
2、 如果该类有直接或者间接的不可序列化的基类,那么该基类必须有一个默认的构造器。该派生类需要负责将其基类的数据写入流中。
3、
4、
练习题:
Student类:
public class Student extends Person{
/**
*
*/
private static final long serialVersionUID = 2029845056621238802L;
private int sid;
private String name;
private int age;
private transient String sex; //使用transient修饰的属性不会被序列化
public int getSid() {
return sid;
}
public void setSid(int sid) {
this.sid = sid;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
@Override
public String toString() {
return "Student [sid=" + sid + ", name=" + name + ", age=" + age + ", sex=" + sex + "]";
}
}
Person类:
import java.io.Serializable;
public class Person implements Serializable{
//对象能够序列化的必要条件:实现Serializable接口
}
主类:
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import com.neuedu.chapter03.序列化类.Student;
public class ObjectOutputStreamDemo {
public static void main(String[] args) {
FileOutputStream output=null;
FileInputStream input=null;
try {
//序列化
output=new FileOutputStream("File/student.txt",true);
ObjectOutputStream out=new ObjectOutputStream(output);
//反序列化
input=new FileInputStream("File/student.txt");
ObjectInputStream in=new ObjectInputStream(input);
Student s1=new Student();
s1.setSid(1234);
s1.setName("哈哈");
s1.setAge(18);
**s1.setSex("珊珊是猪");//这里的属性加了transient关键字所有不会显示**
//将对象写进文件
out.writeObject(s1);
//将对象从文件中读取
System.out.println(in.readObject().toString());
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}