IO流

1.IO流

  1.概念

    * IO流用来处理设备之间的数据传输

    * Java对数据的操作是通过流的方式

    * Java用于操作流的类都在IO包中

    * 流按流向分为两种:输入流(读取数据),输出流(写入数据)。

    * 流按操作类型分为两种:

    * 字节流 : 字节流可以操作任何数据,因为在计算机中任何数据都是以字节的形式存储的

    * 字符流 : 字符流只能操作纯字符数据,比较方便。

  2.IO流常用父类

  * 字节流的抽象父类:

    * InputStream

    * OutputStream

  * 字符流的抽象父类:

    * Reader

    * Writer

  * 3.IO程序书写

    * 使用前,导入IO包中的类

    * 使用时,进行IO异常处理

    * 使用后,释放资源

2.FileInputStream

 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      */

3.read()方法返回值为什么是int

  read()方法读取的试试一个字节,为什么返回的是int而不是byte

    因为字节输入流可以操作任意类型的文件,比如图片音频等,这些文件底层都是以二进制形式存储,如果每次读取都返回byte,

    有可能在读到中间的时候遇到11111111,那么这11111111在byte中表示的是-1,而我们的程序在遇到-1时停止运行,后面的数据

    会丢失,所以在读取时用int类型,如果遇到11111111时会在前面补上3个字节的0,byte类型的-1就变成int类型的255

    这样就可以保证整个数据都可以读取完成,读取完成后,就会返回个-1,结束程序

 

4.FileOutputStream

  

 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);

5.拷贝文件

  

 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();
原文地址:https://www.cnblogs.com/xsh726/p/11443157.html