Java: FileInputStream

操作本地文件的字节输入流,可以把本地文件中的数据读取到程序中来。

1.书写步骤

1.创建字节输入流对象

       细节1:如果文件不存在,就直接报错。

2.读取数据

        细节1:一次读一个字节,读出来的是数据在ASCII上对应的数字

        细节2:读到文件末尾了, read方法返回-1。

3.释放资源

        细节1:每次使用完流必须要释放资源。

案例1:

 //创建对象
        FileInputStream fio = new FileInputStream("G:\\JavaReview\\day31\\my.txt");
        //读取数据
        System.out.println((char) fio.read());
        //释放资源
        fio.close();

2.字节输入流循环读取 

每一次调用read()方法,指针都会加1.所以需要创建临时变量b。

案例2:

 FileInputStream fio = new FileInputStream("G:\\JavaReview\\day31\\my.txt");
        int b;
        while ((b = fio.read()) != -1) {
            System.out.println((char) b);
        }
        fio.close();

3.文件拷贝 

 案例3:拷贝一个视频

        FileInputStream fis = new FileInputStream("E:\\bbb\\鬼灭第三季pv.mp4");
        FileOutputStream fos = new FileOutputStream("E:\\aaa\\src\\copy.mp4");
        //拷贝
        //边读边写
        int b;
        while ((b = fis.read())!=-1){
            fos.write(b);
        }
        //释放资源
        //先开后闭的原则
        fos.close();
        fis.close();

4.FilelnputStream读取的问题 

当拷贝文件较大时,读取速度慢。

1.原因是:FilelnputStream一次读写一个字节。

2.解决方法:

重载read方法:

  • public int read():一次读一个字节数据
  • public int read(byte[] buffer):一次读一个字节数组数据 

注意:一次读一个字节数组的数据,每次读取会尽可能把数组装满

案例4:

        FileInputStream fis = new FileInputStream("G:\\JavaReview\\day31\\my.txt");
        byte[] bytes = new byte[2];
        //读取
        int len = fis.read(bytes);
        System.out.println(len);
        //转化为字符串
        String str = new String(bytes,0,len);
        System.out.println(str);
        fis.close();

 案例5: 改进过后的拷贝视频代码

        FileInputStream fis = new FileInputStream("E:\\bbb\\鬼灭第三季pv.mp4");
        FileOutputStream fos = new FileOutputStream("E:\\aaa\\src\\copy.mp4");
        //拷贝
        int len;
        byte[] bytes = new byte[1024 * 1024 * 5];
        while ((len = fis.read(bytes))!= -1){
            fos.write(bytes,0,len);
        }
        //释放资源
        fos.close();
        fis.close();

你可能感兴趣的:(Java,SE,java,开发语言)