黑马程序员:java文件复制问题

---------------------- android培训java培训、期待与您交流! ----------------------

        由于cpu跟内存交换数据比直接跟外设(即硬盘)交换数据效率会更高,所以要保证高效率,必须在缓冲区(即在内存开辟一块区域)里交换数据。即先将数据读到缓冲区中,然后在缓冲区中读取数据,这样文件复制速度会更快。
        开始不能复制大容量文件后来经过修改,可以实现了。一开始直接用bis.available();的大小来设置byte数组的容量,由于java虚拟机的heap只支持64M以下的容量,复制超过64M的大文件时就会报错,即堆栈溢出。所以复制文件得换一种方式,即byte数组设置成指定的大小,然后通过循环逐块的读出和写出。

import java.io.*;

//文件复制操作
public class CopyFile {

 public static void main(String[] args) throws Exception {
  
      File f = new File("E:\\move\\新龙门客栈_BD.rmvb"); // 原始文件

        if (f.isFile() == true) {

       long t = System.currentTimeMillis();
       BufferedInputStream bis = new BufferedInputStream( new FileInputStream(f));
       System.out.println("文件大小(byte):" + bis.available());
       byte[] buf = new byte[1024];

       File f2 = new File("E:\\ordrd.txt"); // 复制后的文件
       BufferedOutputStream bos = new BufferedOutputStream( new FileOutputStream(f2));
       int i;
       while ((i = bis.read(buf)) != -1) {
           bos.flush();// 强制写出
           bos.write(buf, 0, i);
        }
        System.out.println("复制时间(ms):" + (System.currentTimeMillis() - t));
        bis.close();
        bos.close();

       } else {
         System.out.println("这不是个文件!");
       }
    }
}

---------------------- android培训java培训、期待与您交流! ----------------------
详细请查看: http://edu.csdn.net/heima
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值