IO 流
io流示意图:
流: 一连串流动数据的管道
数据源 → 目的地
流的分类:
按流向划分:
输入流: 带有input 或 reader 的流
输出流: 带有output 或 writer 的流
按操作单元划分:
字节流: 带有input 或 output 的流
字符流: 带有reader 或 writer 的流
按功能划分:
节点流: 直接从数据源到目的地
文件 数组 字符串 管道
功能流: 经过包装
缓存 转换 对象 数据 打印
IO流的超类:
字节流:
InputStream 和 OutputStream
字符流:
Reader 和 Writer
超类不能实例化
测试复制文件: 代码
package code;
import java.awt.im.InputContext;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.security.CryptoPrimitive;
//测试复制
public class TestOutputStream {
public static void main(String[] args) throws IOException {
/*
* //第一步 选择流 InputStream is = new FileInputStream("D:/abc.txt");
* OutputStream os = new FileOutputStream("D:/aaa/abc.txt"); //第二部 准备数组
* byte[] car = new byte[1024]; //第三部 读写读入 int len = -1;//默认无数据输出-1
* while((len=is.read(car))!=-1){ os.write(car, 0, len); } //第四部 刷出
* os.flush(); //第五步 关闭 先打开的后关闭 os.close(); is.close(); //处理异常
*/
// 添加
InputStream is = null;
OutputStream os = null;
try {
is = new FileInputStream("D:/abc.txt");
os = new FileOutputStream("D:/aaa/abc.txt");
// 第二部 准备数组
byte[] car = new byte[1024];
// 第三部 读写读入
int len = -1;// 默认无数据输出-1
while ((len = is.read(car)) != -1) {
os.write(car, 0, len);
}
// 第四部 刷出
os.flush();
} catch (IOException e) {
e.printStackTrace();
} finally {
// 第五步 关闭 先打开的后关闭
// 作用域不对 上面需要添加
if (os != null) {
os.close();
}
if (is != null) {
is.close();
}
}
}
}