java I/O流
File对象是文件和文件目录路径的抽象表示形式,与平台无关,它能新建、删除、重命名文件和目录,但 File 不能访问文件内容本身,访问文件本身需要流(Steam,Reader...)来执行
这个答案是不确定的,File创建出来的对象可以不存在,也可以存在,但如果要用File对象来表示一个真实存在的文件或者文件夹,就必须保证文件存在!
了解了File之后,我们走向流
I/O是Input/Output的缩写, I/O技术是非常实用的技术, 用于处理设备之间的数据传输。 如读/写文件,网络通讯等
首先,这两个概念都是针对程序来说的,将数据读到程序类=输入(input),将数据从程序写到文件或数据库=输出(output)
按操作数据单位分: 字节流(8 bit),字符流(16 bit)
按数据流的流向分: 输入流,输出流
按流的角色分: 节点流,处理流
(抽象基类)
字节流
字符流
输入流
InputStream
Reader
输出流
OutputStream
Writer
助记:人类阅读(read)看到的是文字、字符等等,所以字符流就是:Reader和Writer,因此剩下的那个就是字节流

InputStream 和 Reader 是所有输入流的基类
OutputStream & Writer
写入:
1.建立一个流对象,将已存在的一个文件加载进流。
2.创建一个临时存放数据的数组。
3.调用流对象的读取方法将流中的数据读入到数组中。
4.关闭资源。
输出:
1.创建流对象,建立数据存放文件
2.调用流对象的写入方法,将数据写入流
3.调用flush()清除缓存
4.关闭流资源,并将流中的数据清空到文件中。
读取
输出
因为缓冲流的读写速度更快
InputStreamReader:将InputStream转换为Reader
OutputStreamWriter:将Writer转换为OutputStream
InputStreamReader的构造方法:
OutputStreamWriter的构造方法:
能传输java对象的一种流
用于存储和读取基本数据类型数据或对象的处理流。它的强大之处就是可以把Java中的对象写入到数据源中(序列化),也能把对象从数据源中还原回来。(反序列化)
ObjectInputStream(反序列化)和OjbectOutputSteam(序列化)
序列化: 用ObjectOutputStream类保存基本类型数据或对象的机制
反序列化: 用ObjectInputStream类读取基本类型数据或对象的机制
对象序列化机制允许把内存中的Java对象转换成平台无关的二进制流,从而允许把这种二进制流持久地保存在磁盘上,或通过网络将这种二进制流传输到另一个网络节点。当其它程序获取了这种二进制流,就可以恢复成原来的Java对象
1.自定义的类需要实现Serializable接口(相当于传输标识),方可序列化;
2.自定义类的属性都需要可序列化,比如自定义的属性也需要实现Serializable接口;
3.实现了Serializable接口的类都需要有一个标识序列化版本标识符的静态常量:
private static final long serialVersionUID;(可以随便给,如果不给,当该类被修改后,就无法还原)
4.注意事项:ObjectOutputStream和ObjectInputStream不能序列化static和transient修饰的成员变量
首先建好要传输的实体对象
编写序列化类
反序列化类
运行结果:
稍作改动Person类:
再次运行,结果如下:
到此结束