平时我们文件的上传和下载都是需要io流
电脑上的所有文件,文档,音频,图片,视频 都可以读和写
缓冲的的概念看视频有点卡,图片加载不出来,视频暂停一下,加载缓冲一下,图片等会看,加载缓冲一下
快递送到物流中转站,然后分批次的发。物流中转站就是缓冲的概念
IO流的本质就是对电脑文件的读和写
IO的分类输入流分为两种:
1.字节输入流 FileInputStream
2.字符输入流
输出流分为两种:
1.字节输出流 FileOutputString
2.字符输出流
简单举一个例子
package com.xxx.xxx; import java.io.*; public class Demo2 { public static void main(String[] args) throws IOException { //1.创建File对象 File file = new File("c:/a/bbb/2.txt"); //2.创建字节输入流,将2.txt扔给fis对象 FileInputStream fis = new FileInputStream(file); //3.创建字节缓冲流,fis又仍给了bis,现在咱们的数据在bis中 BufferedInputStream bis = new BufferedInputStream(fis); //4.声明一个缓冲数组,将bis里面的数据读取出来,赋值给这个缓冲数组 byte[] buf = new byte[1024*4];//4096字节 //5.开始使用read方法进行读取数据,读取的时候使用while循环 //如果2.txt文件中的字节数超过了4096哥字节,需要用到循环 int length; //相当重要,决定咱们的数据每次读取多少 //length实际读取的字节数 //固定写发 while ((length = bis.read(buf))!=-1){ //byte数组有值以后,打印一下看看 System.out.println("嘿嘿嘿"); //将字节数组转为字符串 //并没有实际意义 System.out.println(new String(buf,0,length)); } //关流 bis.close(); fis.close(); } }
一共的步骤就只有五六步,而且是固定写法
字节输出流也是这样同样的,只是方法的名字改了一下而已,用法相同
字符输入流FileReader:
是一个阅读字符文件的便利类,是专门处理字符文件的,比如txt文件。音频视频图片
牵涉到解码,底层是字节流,但是会解码为字符。如果解码失败就意味着咱们读取失败了
一般不会使用字符流操作图片 音频 视频等,因为牵涉到解码。会出问题!!!
这是一个简单的例子
package com.xxx.xxx; import java.io.*; public class Demo1 { public static void main(String[] args) throws IOException { //将c盘下面的aaa文件夹下面的1.txt文件的内容 读取到Java内存中 //和字节流一模一样 //1.新建一个File对象 File file = new File("c:/aaa/1.txt"); //2.新建FileReader 对象 字符输入流 FileReader fr = new FileReader(file); //3.FileRFeader没有缓冲的效果,可以加上缓冲的效果 //杂加?BufferedReader BufferedReader br = new BufferedReader(fr); //4.字节的缓冲数组 是字节 //字符的缓冲数组 是字符 char[] cbuf = new char[4];//缓冲区是4个字符 //这个方法是用的!!! //5. read(char[] cbuf) 将文件内容读取到字符数组中(缓冲区) int length = -1; while ((length = br.read(cbuf)) != -1) { System.out.println(length); //6.将数组展示到控制台 System.out.println(new String(cbuf, 0, length)); } //7.关闭流 br.close(); fr.close(); } }
字符输入流和字符输出流的方法都是差不多的,只是方法的名字不一样了
字符输入输出流中readLine();方法是读取文件的一行一行的取直到取完为止