1.概念数组
* IO流用来处理设备之间的数据传输ide
* Java对数据的操做是经过流的方式编码
* Java用于操做流的类都在IO包中spa
* 流按流向分为两种:输入流(读取数据),输出流(写入数据)。code
* 流按操做类型分为两种:视频
* 字节流 : 字节流能够操做任何数据,由于在计算机中任何数据都是以字节的形式存储的对象
* 字符流 : 字符流只能操做纯字符数据,比较方便。blog
2.IO流经常使用父类图片
* 字节流的抽象父类:资源
* InputStream
* OutputStream
* 字符流的抽象父类:
* Reader
* Writer
* 3.IO程序书写
* 使用前,导入IO包中的类
* 使用时,进行IO异常处理
* 使用后,释放资源
1 //从一个文件中读取数据 2 /** 3 * 1。建立一个文件输入对象,并关联a。txt 4 * 2.定义一个遍历,记录每次读到的字节 5 * 3.循环遍历打印读出该内容 6 * read()方法 依次读取一个字节 7 */ 8 FileInputStream file = new FileInputStream("a.txt"); 9 int b; 10 while((b = file.read()) != -1) { 11 System.out.println(b); 12 } 13 //释放资源!! 14 file.close(); 15 16 /** 17 * throws抛出的是文件可能找不到的错误 18 * 读文件是也有可能读不成功,一样须要进行异常处理 19 * FileNotFoundException是IOException的一个子类 20 * 输出内容就是GBK编码,缘由GBK编码包含了ASCII码表 21 * -1表示文件的结尾,当遇到-1时,表示文件已经读取完毕 22 * 23 */
read()方法读取的试试一个字节,为何返回的是int而不是byte
由于字节输入流能够操做任意类型的文件,好比图片音频等,这些文件底层都是以二进制形式存储,若是每次读取都返回byte,
有可能在读到中间的时候遇到11111111,那么这11111111在byte中表示的是-1,而咱们的程序在遇到-1时中止运行,后面的数据
会丢失,因此在读取时用int类型,若是遇到11111111时会在前面补上3个字节的0,byte类型的-1就变成int类型的255
这样就能够保证整个数据均可以读取完成,读取完成后,就会返回个-1,结束程序
1 //write()方法一次录入一个字节 2 //若是没有b.txt的话,就建立一个 3 FileOutputStream file = new FileOutputStream("b.txt"); 4 //虽然输入的时int类型,但在写出时会自动转为byte类型,去掉前面的3个字节 5 file.write(98); 6 //释放资源 7 file.close(); 8 9 10 //追加功能 11 //从新在录入时,会把原来的数据清除掉,在去添加,也就是把原来的数据覆盖掉 12 //在关联文件时,加一个true的关键字,就不会覆盖,而是在原来数据以后在添加内容 13 FileOutputStream file1 = new FileOutputStream("b.txt",true); 14 file1.write(98); 15 file1.write(99);
1 FileInputStream file = new FileInputStream("F:\\21班Java基础课程\\课件视频\\day20_IO流\\video\\01.wmv"); 2 FileOutputStream file1 = new FileOutputStream("F:\\21班Java基础课程\\课件视频\\day20_IO流\\video\\复制.wmv"); 3 //获取关联文件的全部字节 4 int i = file.available(); 5 //声明一个和文件大小同样的byte的数组 6 byte [] bytes = new byte[i]; 7 //一次性的读完整个文件的全部内容 8 file.read(bytes); 9 //把这个内容一次性的写入指定的文件 10 file1.write(bytes); 11 file.close(); 12 file1.close();