zoukankan      html  css  js  c++  java
  • 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

          }

        }

  • 相关阅读:
    个人所得税避税的10种方法
    营业税
    融资租赁
    会计等式
    公司公积金
    fixed语句
    自由之路
    $or操作符
    $in 操作符
    Redis 字典的实现
  • 原文地址:https://www.cnblogs.com/JasperZhao/p/14867467.html
Copyright © 2011-2022 走看看