您的位置:首页 > 职场人生

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

2012-06-03 10:39 218 查看
---------------------- 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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐