JavaSE: FileOutputStream类 & FileInputSteam类

FileOutputStream类

<1>  基本概念

      java.io.FileOutputStream类:用于将图像数据之类的原始字节流写入到输出流中。

<2>  常用的方法

      方法声明                          功能介绍

      1.FileOutputStream(String name)              根据参数指定的文件名来构造对象

      2.FileOutputStream(String name, boolean append)       以追加的方式,根据参数指定的文件名,来构造对象

      3.void write(int b)                     将指定字节,写入此文件输出流

      4.void write(byte[] b, int off, int len)              将指定字节数组中从偏移量off开始的len个字节写入此文件输出流

      5.void write(byte[] b)                     将 b.length 个字节从指定字节数组写入此文件输出流中 

      6.void flush()                       刷新此输出流并强制写出任何缓冲的输出字节

      7.void close()                         关闭流对象并释放有关的资源  

FileInputStream类

<1>  基本概念

      java.io.FileInputStream: 用于从输入流中以字节流的方式获取图像数据等。

<2>  常用的方法

      方法声明                     功能介绍

      8.FileInputStream(String name)         根据参数指定的文件路径来构造对象

      9.int read()                   从输入流中读取单个字节的数据并返回,返回-1表示读取到末尾

      10.int read(byte[] b, int off, int len)         从此输入流中,将最多len个字节的数据存入字节数组中,返回读取到的字节个数,

                                 返回 -1 表示读取到末尾

      11.void close()                关闭流对象,并释放有关的资源

         12.int available()               获取输入流所关联的文件的大小

案例题目

    编程实现两个文件之间的拷贝功能

代码示例:

    class FileByteCopyTest{

      main(){

        //  获取当前系统时间距离 1970年1月1日0时0分0秒的毫秒数

        long g1 = System.currentTimeMillis();

        

        FileInputStream fis = null;

        FileOutputStream fos = null;

        try{

          //  1.  创建FileInputStream类型的对象,与d:/03 IO流的框架图.png 文件关联

          //  fis = new FileInputStream("d:/02_IO流的框架结构.mp4");

          fis = new FileInputStream ("d:/02_IO流的框架结构.mp4");

          //  2.  创建FileOutputStream类型的对象,与d:/03 IO流的框架图.png 文件关联

          fos = new FileOutputStream("d:/IO流的框架结构.mp4");

          

          //  3.  不断地从输入流中,读取数据内容,并写入到输出流中

          println("正在玩命地拷贝...");

          //  方式一:以单个字节为单位进行拷贝,也就是每次读取一个字节后,再写入一个字节

          //  缺点:  文件稍大时,拷贝的效率很低

          /*

            int res = 0;

            while ( (res = fis.read(bArr)) != -1){

              fos.write(res);

            }

          */

          //  方式二: 准备一个和文件大小一样的缓冲区,一次性将文件中的所有内容取出到缓冲区,然后一次性写入进去

          //  缺点:  若文件过大时,无法申请和文件大小一样的缓冲区,真实物理内存不足

          /*

            int len = fis.available();

            println("获取到的文件大小是:" + len);

            byte[] bArr = new byte[len];

            int res = fis.read(bArr);

            println("实际读到的文件大小是:" + res);

            fos.write(bArr);

          */

          //  方式三:  准备一个相对适当的缓冲区,分多次将文件拷贝完成

          byte[] bArr = new byte[1024];

          int res = 0;

          while ( (res = fis.read(bArr)) != -1 ) {

            fos.write(bArr,0,res);

          }

          println("拷贝文件成功!");

          */  

        } catch(IOException e) {

          e.printStackTrace();

        } finally {

          //  4.  关闭流对象,并释放有关的资源

          if (null != fos){

            try{

              fos.close();

            } catch(IOException e) {

              e.printStackTrace();

            }

          }

          

          if (null != fis){

            try{

              fis.close();

            } catch(IOException e) {

              e.printStackTrace();

            }

          }

        }

        long g2 = System.currentTimeMillis();

        println("使用文件流拷贝文件消耗的时间为:" + (g2 - g1));  //  165

      }

    }

原文地址:https://www.cnblogs.com/JasperZhao/p/14867467.html