IO流
i = input = 输入 o = output = 输出
什么是流?
流是数据从源点通向汇点的管道
流的分类:
按照方向分: 输入流 输出流
按照单位分: 字节流 字符流
按照功能分: 节点流 过滤流
*:过滤流 = 包装流 = 处理流
*:所有的流 都需要在使用结束之后关闭流 close();
抽象类
InputStream 所有字节输入流统一的父类(抽象类)
int read()
int read(byte[] data)
int read(byte[] data,int off,int len)
OutputStream 所有字节输出流统一的父类(抽象类)
write(int data)
write(byte[] data)
write(byte[] data,int off,int len)
FileInputStream 输入流 字节流 节点流
*:构造方法允许传入String或者File
*:一定要保证连接的是个文件 绝对不能连接目录 否则直接异常
*:最常用的read是那个带数组参数的read(byte[] data)
FileOutputStream 输出流 字节流 节点流
*:构造方法允许传入String或者File
*:节点输出流创建对象的时候 其连接的文件即便不存在 也会自动创建
如果文件已经存在 也会被新的空白文件替换(当心哦 会替换!)
createNewFile() 不需要去调用
*:如果节点输出流连接的目录结构都不存在 它是不能创建的 而会直接异常
mkdirs()
*:节点输出流构造方法的第二个参数 允许传入一个布尔值
代表是否追加模式打开目标文件
*:无论何时何地 千万不要让输入流和输出流同时连接同一个文件
否则怎么都是错!
*:跟输入流不同 输出流最常用的方法 不是单个参数的write(byte[])
而是三个参数的write(byte[] data,int off,int len)
否则会出现“尾巴”
===============================================================
*: 它们能给原本的节点流添加缓冲空间
从而大幅度的提高每次读写的吞吐量 进而提高效率...
*: 作为过滤流 它是不允许直接连接数据的源点或者汇点的(不能连接文件)
只能连接其他的流
*: 构造方法的第二个参数允许指定缓冲空间的大小 默认只有8192字节 = 8K
当我们读取的文件很大的时候 需要自定义大小
BufferedInputStream 字节流 输入流 过滤流
*: 注意要使用三个参数的read(byte[] data,int off,int len)
单参read()并没有利用缓冲空间...
BufferedOutputStream 字节流 输出流 过滤流
*: 在无法关闭流的情况下 一定注意清空缓冲区...
缓冲区什么条件下清空?
1.满了自动清空
2.关闭流的操作会触发清空缓冲
3.手动调用flush() 主动清空缓冲
================================
FileReader fr = new FileReader("focus.txt");
FileWriter fw = new FileWriter("sucof.txt");
//如果直接使用这两个流是无法完成按行读取的
BufferedReader br = new BufferedReader(fr);
BufferedWriter bw = new BufferedWriter(fw);
String str;
while((str = br.readLine())!=null){
bw.write(str);
bw.newLine();//写出一个由系统决定的换行标识
}
br.close();
bw.close();