什么是io流
平时我们文件的上传和下载都是需要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();方法是读取文件的一行一行的取直到取完为止