缓冲流实现复制功能2.0

/**
 * 程序的作用同样是用缓冲流实现文件的复制功能,只不过有以下几点提高:
 * 1.针对较大的文件,我们可以读一个字节写一个字节的方式,而不用读完了在写。
 *   这样就可以避免预估bytes【】的数组大小
 * 2.加入了显示复制用时的方法。
 */

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;



public class copy_2 {

    public static final String filepath1 = "/home/zouxu/gcc.tar.bz2"; //要复制的文件地址
    public static final String filepath2 = "/home/zouxu/gcc的复制文件"; //复制的去向地址

    public static void main(String[] args) {
        long copytime = CopyFileByBufferedStream();
        System.out.println("复制完成,花费时间为:" + copytime +"ms");

    }

    private static long CopyFileByBufferedStream()
    {
        long starttime = System.currentTimeMillis();//开始执行复制时的时间
        File file1 = new File(filepath1);//被复制的文件
        File file2 = new File(filepath2);//复制完生成的文件

        if(!file1.exists())
        {
            System.out.println("被复制文件不存在,复制失败");
            return 0;
        }

        InputStream inputstream = null;  //注意这里为什么要这么做:因为如果写成InputStream inputstream = new FileInputStream(file1),这句话一旦放入try后如果出错,inputstream
                                         //对象定义失败,则会影响后面的缓冲流,所以需要先申明一个空的。
        OutputStream outputstream = null; //原因同上
        try {
             inputstream = new FileInputStream(file1);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }

        try {
            outputstream = new FileOutputStream(file2);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }

        BufferedInputStream binputstream = new BufferedInputStream(inputstream);
        BufferedOutputStream boutputstream = new BufferedOutputStream(outputstream);

        int i =-1;

        try {
            while(( i = binputstream.read()) != -1)
            {
                boutputstream.write(i);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }

        try {
                binputstream.close();
            } catch (IOException e) {
                e.printStackTrace();
            }


        try {
                inputstream.close();
            } catch (IOException e) {
                e.printStackTrace();
            }


        try {
                boutputstream.close();
            } catch (IOException e) {
                e.printStackTrace();
            }


        try {
                outputstream.close();
            } catch (IOException e) {
                e.printStackTrace();
            }


        long endtime = System.currentTimeMillis();  //复制完成时的时间
        return (endtime-starttime);
    }

}

我们复制的文件是一个大小为99兆的小电影0.0(哈哈。开玩笑的,是一个编译器)。可以发现,耗时在2s左右。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值