【济南中心】JAVA编程阶梯:基础篇之第二十章
IO流概述及其分类:
1.概念
    * IO流用来处理设备之间的数据传输
    * Java对数据的操作是通过流的方式
    * Java用于操作流的类都在IO包中
    * 流按流向分为两种:输入流,输出流。
    * 流按操作类型分为两种:
        * 字节流 : 字节流可以操作任何数据,因为在计算机中任何数据都是以字节的形式存储的
        * 字符流 : 字符流只能操作纯字符数据,比较方便。
2.IO流常用父类
    * 字节流的抽象父类:
        * InputStream 
        * OutputStream
    * 字符流的抽象父类:
        * Reader 
        * Writer       
3.IO程序书写
    * 使用前,导入IO包中的类
    * 使用时,进行IO异常处理
    * 使用后,释放资源
IO流之FileInputStream:字节流
read()一次读取一个字节
[Java] 纯文本查看 复制代码
?
1
2
3
4
5
6
7
FileInputStream fis = new FileInputStream("");    //创建一个文件输入流对象,并关联
        int b;                                                    //定义变量,记录每次读到的字节
        while((b = ad()) != -1) {                            //将每次读到的字节赋值给b并判断是否是-1
            System.out.println(b);                                //打印每一个字节
        }
         
        fis.close();                                            //关闭流释放资源
问题:既然read()读取的是一个字节,为什么返回的是int,不是byte
因为字节输入流可以操作任意类型的文件,比如图片音频等,这些文件底层都是以二进制形式的存储的,如果每次读取都返回byte,有可能在读到中间的时候遇到111111111,那么这11111111byte类型的-1,我们的程序是遇到-1就会停止不读了,后面的数据就读不到了,所以在读取的时候用int类型接收,如果11111111会在其前面补上240凑足4个字节,那么byte类型的-1就变成int类型的255了这样可以保证整个数据读完,而结束标记的-1就是int类型
IO流之FileOutputStream 
write()一次写出一个字节
[Java] 纯文本查看 复制代码
?
1
2
3
4
5
FileOutputStream fos = new FileOutputStream("");    //如果没有,会创建出一个
        //fos.write(97);                        //虽然写出的是一个int,但是在写出的时候会将前面的240去掉,所以写出的一个byte
        fos.write(98);
        fos.write(99);
        fos.close();
       
例子:FileOutputStream的构造方法写出数据如何实现数据的追加写入
[Java] 纯文本查看 复制代码
?
1
2
3
4
5
FileOutputStream fos = new FileOutputStream("",true);    //如果没有,会创建出一个
        //fos.write(97);                        //虽然写出的是一个int,但是在写出的时候会将前面的240去掉,所以写出的一个byte
        fos.write(98);
        fos.write(99);
        fos.close();
例子:拷贝图片
FileInputStream读取
FileOutputStream写出
[Java] 纯文本查看 复制代码
?
01
02
03
04
05
06
07
08
09
10
FileInputStream fis = new FileInputStream("致青春.mp3");    //创建输入流对象,关联致青春.mp3
        FileOutputStream fos = new FileOutputStream("copy.mp3");//创建输出流对象,关联copy.mp3
         
        int b;
        while((b = ad()) != -1) {
            fos.write(b);
        }
         
        fis.close();
        fos.close();
字节数组拷贝之available()方法
A:案例演示
* int read(byte[] b):一次读取一个字节数组
* write(byte[] b):一次写出一个字节数组
* available()获取读的文件所有的字节个数
弊端java程序设计基础视频:有可能会内存溢出 
   
[Java] 纯文本查看 复制代码
?
1
2
3
4
5
6
7
FileInputStream fis = new FileInputStream("致青春.mp3");
FileOutputStream fos = new FileOutputStream("copy.mp3");
byte[] arr = new    byte[fis.available()];                    //根据文件大小做一个字节数组
        ad(arr);                                            //将文件上的所有字节读取到数组中
        fos.write(arr);                                            //将数组中的所有字节一次写到了文件上
        fis.close();
        fos.close();

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。