IO流
IO就是输入输出,IO设备在计算机中起着举足轻重的作用,IO流也就是输入输出流,用来交互数据,程序和程序交互,程序也可以和网络等媒介交互。
一、IO流的分类
要分类,肯定得站得不同角度来看这个问题。
- 根据流向划分,分为输入流和输出流
- 根据数据的单位来分划,分为字节流和字符流
- 根据功能划分,分为节点流和包装流
- 还有很多
二、四大基本流
在java中IO流非常之多,但都继承于这四大基流,分别为,字节输入流(InputStream),字节输出流(OutputStream),字符输入流(Reader)和字符输出流(Writer).
它们都是抽象类,不能创建对象,只能创建它们的子类对象,阅读API发现,它们都有一个共同的方法close方法,用来关闭流,如果不关闭流的话程序会一直引用着文件。
三、模板操作
- 创建源和目标
- 创建流对象
- 具体的IO操作
- 关闭流
在下面的例子中穿插讲述
四、文件流
文件流操作是是文件。分为字符流和字节流,字节流操作是所有的二进制文件包括视频啊,图片啊什么的。字符流主要解决的还是中文的一些问题,因为中文多个字节(GBK是2个字节,UTF-8是3个字节),所有可能出现读一半或者写一半就不读了或者不写了,这样就出现乱码了。具体用字符流还是字节流得具体选择,字节流是可以操作字符流的,但是反过来就可能出现问题。输入就是从文件中读到程序中来,而输出就是从程序中输出到文件中。在这样章节记住一句话:读进来,写出去。下面操作一下各个流的常用方法,
-
文件字节输入流(FileInputStream)
int read() 从此输入流中读取一个数据字节。 int read(byte[] b) 从此输入流中将最多 b.length 个字节的数据读入一个 byte 数组中 int read(byte[] b, int off, int len)从此输入流中将最多 len 个字节的数据读入一个 byte 数组中读取文件中所有的数据,用到了一个缓冲数组,也就是每次读取5个字节,直到读完为止有个len返回当前读了几个字节,如果后面没有字节了,那么它就返回-1
//读取文件中所有的数据 byte[] buffer = new byte[5];//定义一个缓冲数组长度为5,每次只能读取5个字节 int len = 0;//当前读取的字节数,没有字节就返回 -1 while((len = in.read(buffer))!= -1 ){ String str = new String(buffer,0,len); System.out.println(str); } -
文件字节输出流(FileOutputStream)
1.void write(byte[] b) 将 b.length 个字节从指定 byte 数组写入此文件输出流中。 2.void write(byte[] b, int off, int len) 将指定 byte 数组中从偏移量 off 开始的 len 个字节写入此文件输出流。 3.void write(int b) 将指定字节写入此文件输出流。输出就是想文件中写数据,可以一次写一个字节,也可以写一个数组中的元素,这个比较简单。可以用一下四个步骤操作一下
public class FileOutputStreamDemo { public static
