IO流
IO流(Input/Output)作用:实现两个设备之间数据的传递;
分类
- 根据操作的方式:输入流和输出流
- 根据数据的类型:字节流和字符流
传输
- 字节流:直接传输的是字节,可以操作任意类型的数据 ----音频,视频,文件,图片
- 字节输入流:InputStream,是抽象的,不能直接创建对象
- 字节输出流:OutputStream
- 字符流:传输的是字节,不同点是在传输过程中加入了编码的操作,让我们的操作更方便 ----只能传文本
- 字符输入流:Reader
- 字符输出流:Writer
在描述读与写的时候是以内存为参考,将数据从其他设备放入内存叫读入(输入流),将数据从内存放入其他设备叫写出(输出流);
创建FileWriter对象并关联相应的文件
FileWriter fileWriter = new FileWriter("test1.txt"); //如果不写路径,默认在当前工作路径
- 对于关联的文件,如果之前不存在,程序会自动创建一个,如果存在,会将原来的内容覆盖
- 在执行write方法时,数据被临时放到了流对象的内部数组中,这个数组是一个字节数组
fileWriter.write("chenchen");
FileWriter fileWriter=new FileWriter("test1.text",true);
文件不会被覆盖
fileWriter.write("123");
- 刷新—将临时数组中的数据放入磁盘
```fileWriter.flush();``
- 流对象使用完后必须关闭
fileWriter.colse();
创建FileReader对象并读取相关文件
FileReader fileReader=new FileReader("text1.txt");
- read()–一个字符,一个字符去读 //读取的是ASCII码值
while((num=fileReader.read())!=-1){}
- read(数组)–按照数组读,本质也是一个字符一个字符去读, read的返回值是每次读到的字符个数
while((num=fileReader.read(arr))!=-1){syso("new String(arr,0,num)"+num)}
字符缓冲写出流
BufferedWriter bufferedWriter=new BufferedWriter(new FileWriter("text2.txt"));
bufferWriter.write("bingbing");
buferedWriter.newLine();//换行--支持跨平台
bufferedWriter.close();
字符缓冲读入流
- 比FileWriter多一个一行一行的读的方法readline()
- readline()返回字符串,读完返回null
能指定字符编码的I/O流类型
InputStreamReader,OutputStreamWriter
装饰设计模式
定义:在基础功能之上,提供增强的功能
特点:
①使流原来的继承体更加简单
②提高了效率
③由于是在原有的基础上提高增强的功能,所以他还要属于原来的体系
- 模拟字符缓冲读入流
①要属于流的体系
②要有一个Reader类型的成员变量
③要有一个带参数的构造方法接受外部传入的流对象
④模拟readline(),实现读一行的功能
⑤关闭流
适配器设计模式
用一个中间类去完成对接口的实现,从而继承去重写自己想调用的方法;
LineNumberReader
- 是BufferReader的子类
- 通过setLineNumber(),去设置行号,默认为0,从第一行开始读
FileInputStream 字节输入流
FileOutputStream 字节输出流
BufferedInputStream 字节缓冲输入流
BufferedOutputStream 字节缓冲输出流
- 只能一个字节一个字节读取,不能读一行
标准输入流
- System.in //默认绑定键盘
- 更改输入流的源:setIn
- 更改该输出流的源:setOut
- 以键盘作为输入源:
BufferedReader bufferedReader=new BufferedReader(new InputStreamReader(System.in));
- 以文件作为输入源:
BufferedReader bufferedReader=new BufferedReader(new FileReader("temp1.txt"));
- 以控制台作为输出源:
BufferedWriter bufferedWriter=new BufferedWriter(new OutputStreamWriter(System.out));
- 以文件作为输出源
BufferedWriter bufferedWriter=new BufferedWriter(new FileWriter("temp2.txt"));
输入转换流
InputStreamReader //字节输入转换流 (字符流)
输出转换流
OutputStreamWriter //字节输出转换流 (字符流)
将标准字节输入流转成字符缓冲读入流
BufferedReader bufferedReader=new BufferedReader(new InputStream(System.in));
将标准字节输出流转成字符缓冲写出流
BufferedWriter bufferedWriter=new BufferedWriter(new OutputStreamWriter(System.out));
- 字符转换字节 称 编码
- 字节转换字符 称 解码
打印流
- 字节打印流:PrintStream
- 字符打印流:PrintWriter
- 字节打印流支持的设备:
①.File类型的文件
②.字符串类型的文件
③.字节输出流
- 字符打印流比字节打印流多支持一个 字符写出流