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类型的文件

②.字符串类型的文件

③.字节输出流

  • 字符打印流比字节打印流多支持一个 字符写出流