File - 文件类
File:是文件和目录路径名的抽象表示
File只关注文件本身的信息,而不能操作文件里面的内容
File类 -- 表示文件或文件夹,不能对文件里的数据进行操作
对文件里的数据进行操作的是:IO流
IO流
含义:
I - in -- 输入
O - out -- 输出
流 - 一点点的传输
注意:站在程序的角度
流的分类:
按照方向分:输入流、输出流
按照单位分:字节流、字符流
按照功能分:基础流/节点流、处理流
注意:处理流往往是包含了基础流,使得流的功能更加强大(处理流 xxx = new 处理流(new 基础流()))
计算机存储进制:
1024Kb = 1Mb
1024Mb = 1Gb
1024Gb = 1Tb
1024Tb = 1Pb
学习方案:流与流之间的继承关系
学习路线:按照流的发展历史
字节流:
应用场景:操作二进制数据(图片、音频、视频)
class abstract InputStream -- 字节输入流的基类(抽象类)
class abstract OutputStream -- 字节输出流的基类(抽象类)
FileInputStream extends InputStream --- 文件字节输入流
FileOutputStream extends OutputStream - 文件字节输出流
FilterInputStream extends InputStream --- 过滤器字节输入流
FilterOutputStream extends OutputStream - 过滤器字节输出流
BufferedInputStream extends FilterInputStream --- 带有缓冲区的字节输入流
BufferedOutputStream extends FilterOutputStream - 带有缓冲区的字节输出流
缓冲区大小:8192字节
字符流:
应用场景:操作文本数据
class abstract Reader -- 字符输入流的基类(抽象类)
class abstract Writer -- 字符输出流的基类(抽象类)
InputStreamReader extends Reader -- 字符输入转换流
OutputStreamWriter extends Writer - 字符输出转换流
作用:将字节流 -> 字符流
FileReader extends InputStreamReader -- 文件字符输入流
FileWriter extends OutputStreamWriter - 文件字符输出流
BufferedReader extends Reader -- 带有缓冲区的字符输入流
BufferedWriter extends Writer -- 带有缓冲区的字符输出流
缓冲区大小:8192字符
各种流:
对象流:
ObjectInputStream -- 对象输入流
ObjectOutputStream - 对象输出流
作用:将对象写入到文件里,从文件中读取出对象
序列化 - 钝化:程序中的对象写入到文件中
反序列化 - 活化:文件中的对象读取到程序中
注意:
1.写入对象所属的类必须实现Serializable(序列化接口)
2.Serializable接口并没有让实现类实现任何的抽象方法,这种接口叫做标记型接口
3.该类必须添加序列化ID
4.transient修饰该属性,该属性不会随着对象而写入到文件中
5.static修饰该属性,该属性不会随着对象而写入到文件中
打印流:(方向:程序->文件)
PrintStream -- 字节打印流
PrintWriter -- 字符打印流
PrintStream vs PrintWriter
PrintStream: 将字节流转成打印流
PrintWriter: 将字节流、字符流转成打印流
重定向:重新定义系统标准输入输出流的方向
System.in --> InputStream :控制台 -> 程序
System.setIn() 重定向后:文件 -> 程序
System.out --> PrintStream :程序 -> 控制台
System.setOut() 重定向后:程序 -> 文件
System.err --> PrintStream :程序 -> 控制台
System.setErr() 重定向后:程序 -> 文件
随机访问流:
含义:该流认为文件是一个大型的byte数组,有一个隐藏的文件指针,指针指向哪,就可以从哪开始读取或写入
模式:
r - 读
rw - 读写
内存流:
ByteArrayInputStream --- 内存输入流
ByteArrayOutputStream -- 内存输出流
注意:内存流是关闭不掉的,你没有权限关闭程序到内存之间的通道
应用场景:当项目中有一些数据不算很重要,但是需要频繁使用,就可以将数据通过内存流存储在对象中