IO流
IO流分类
按照数据的流向
输入流:读数据
输出流:写数据
按照数据类型分
字节流
字节输入流;字节输出流;
字符流
字符输入流;字符输出流
如果数据通过Windows自带的记事本打开,能读懂里面的内容,就用字符流,否则使用字节流
如果不知道该用哪种流,就用字节流
字节流

实现字节流文件的复制
1 | //字节缓冲流一次读写一个字节数组实现文件的复制 |
字符流

实现字符流文件的复制
1 | //使用字符缓冲流特有的功能实现文件的复制 |
对象序列化流
对象序列化:就是将对象保存到磁盘中,或者网络中传输
这种机制就是使用一个字节序列表示一个对象,该对象序列包含:对象的类型,对象的数据和对象中存储的属性等信息,字节序列化写到文件之后,相当于文件中持久保存了一个对象的信息。
反之,反序列化就是从文件中读取出来,重构对象。
ObjectOutputStream 和 ObjectInputStream
构造方法
- ObjectOutputStream(OutputStream out): 创建一个写入指定的OutputStream的ObjectOutputStream
- ObjectInputStream(InputStream in): 创建一个指定的InputStream读取的ObjectInputStream
(反)序列化对象的方法
- void writeObject(Object obj): 将指定的对象写入ObjectOutputStream
- Object readObject(): 从ObjectInputStream读取一个对象
注意
- 一个对象想要序列化,该对象的类必须实现
Serializable接口,该接口是标记接口,不需要重写任何方法 - 用对象序列化流序列化一个对象后,假如我们修改了对象的类文件,读取数据会抛出
InvalidClassException异常。这时我们可以给对象所属的类加一个serialVersionUID例如: private static final long serialVersionUID = 42L; - 如果一个对象中的某个变成员量的值不想被序列化,可以给成员变量加
transient关键字修饰。
Properties
properties继承Hashtable,是Map体系的集合类。properties可以保存到流中或从流中加载。创建properties对象不用写泛型
特有方法
- Object setProperty(String key,String value): 设置集合的键和值,都是String类型,底层调用Hashtable()方法put
- String getProperty(String key): 使用此属性列表中指定的键搜索属性
- Set<String> stringPropertNames():从该属性列表中返回一个不可修改的键集,其中键机器对应的值是字符串
properties和IO流结合的方法
void load(Reader reader): 从输入字符流读取属性列表(键和元素对)
1
2
3
4
5
6
7
8
9
10//把集合中的文件保存到文件
Properties prop =new Properties();
prop.setProperty("001","aaa");
prop.setProperty("002","bbb");
prop.setProperty("003","ccc");
FileWriter fw = new FileWriter("myCharStream\\fw.txt");
prop.store(fw,null);
fw.close();void store(Writer writer,String comments): 将此属性列表(键和元素对)写入此Properties表中,以适合使用load(Reader)方法的格式写入输出字符流
1
2
3
4
5
6
7//把文件中的数据加载到集合
Properties prop=new Properties();
FileReader fr = new FileReader("myCharStream\\fw.txt");
prop.load(fr);
fr.close();
System.out.println(prop);