文件对象的使用
File:文件对象,用于表示磁盘上的文件夹或数据文件
IO数据流的使用
流: 水流(有方向,有基本的构成单位:水滴),车流(有方向,基本单位:车)
数据流:以字节或字符为单位按特定的方向传送就构成了数据流。
流的分类
输入输出字节流的使用
字节流
输入字节流
抽象类:InputStream 程序可以从目标中连续读取字节的对象称为字节输入流
实现类:FileInputStream
输出字节流
抽象类:OutputStream 程序可以向其中连续写入字节的对象称为字节输出流
实现类:FileOutputStream
流的使用步骤:
缓冲字节流(处理流/包装流)
缓冲流:缓冲流是一个处理流,在普通流的基础上添加了缓冲区,能够在传输数据的时候提升读取或写入效率。
好处:
1.不带缓冲的流读取到一个字节或字符就直接输出
2.带有缓冲的流读取到一个字节或字符先不输出,等达到缓冲区容量再一次性写出
对象流(处理流/包装流)
idea自动生成序列化id的配置
File---》settings---》Editor--》 inspections--》java---》Serialization issues---》Serializable class without 'serialVersionUID'---》打对勾。
序列化版本号的使用:
- 在类上加序列化版本号定义:serialVersionUID
- 序列化对象到磁盘上
- 修改类:添加属性
- 反序列化,此时能正常处理
对象流:可以将内存中的对象数据序列化到磁盘文件中
- ObjectInputStream 将文件中的对象读取到程序中。
- ObjectOutputStream 将程序中的对象写入到文件中。
序列化和反序列化 Serializable 实现
- 序列化 (Serialization)是将对象的状态信息转换为可以存储或传输的形式的过程。在序列化期间,对象将其当前状态写入到临时或持久性存储区。以后,可以通过从存储区中读取或反序列化对象的状态,重新创建该对象。比如:存储游戏进度,下次再接着玩
- 反序列化:反向操作。将数据从存储状态恢复到内存中。
注意:1.如果要将一个对象序列化到磁盘上,那么该对象必须实现Serializable接口
2.为了保证类的一致性,需要在类中定义版本序列号serialVersionUID
3.如果类中某个属性不需要序列化,则可以给该字段标记transient
字符流
字符流:以字符为基本单位进行数据的传输
输入字符流
抽象类:Reader
实现类:FileReader
输出字符流
抽象类:Writer
实现类:FileWriter
缓冲字符流
BufferedReader: 缓冲字符输入流
BufferedWriter: 缓冲字符输出流
字节字符转换流(处理流/包装流)
InputStreamReader 将字节输入流转换成字符输入流
OutputStreamWriter 将字符输出流转为字节输出流
InputStreamReader(InputStream in); 将读取的字节流抓换成字符流
OutputStreamWriter(outPutStream os);将书写的字符流转换成字节流写到文件里。
InputStreamReader(InputStream in,"gb2312"); //将读取的字节流抓换成字符流,可以指明编码格式
OutputStreamWriter(outPutStream os,"utf-8"); //将书写的字符转换成字节流——可以指明编码格式
转换流就是对字节流的封装,将字节流封装成一个字符流,可以指明编码格式。字符流要关闭。
默认按照GBK的编码转化。
注意:字节流可以用来操作所有文件,字符流操作文本文件!
格式化打印流(对于输出流的功能进行增强)
PrintWriter: 是Writer的子类,其作用是将格式化对象打印到一个文本输出流, 主要方法:print()、println()、write()
Properties文件的使用
a. 创建.properties
文件
b. 创建Properties类对象,加载.properties
文件
c. 访问属性文件中的键值对数据