java使用缓冲流复制文件的方法

本文实例为大家分享了java使用缓冲流复制文件的具体代码,供大家参考,具体内容如下

[1] 程序设计

/*-------------------------------
1.缓冲流是一种处理流,用来加快节点流对文件操作的速度
2.BufferedInputStream:输入缓冲流
3.BufferedOutputStream:输出缓冲流
4.在正常的Java开发中都使用缓冲流来处理文件,因为这样可以提高文件处理的效率
5.这里设计程序:使用缓冲流复制一个较大的视频文件
--------------------------------*/
package pack04;

import java.io.*;

public class CopyFile {

 public static void main(String[] args) {

  String src = "d:/TEST/加勒比海盗-黑珍珠号的诅咒.rmvb"; //源文件路径,该文件大小为3.01GB
  String dst = "d:/TEST/加勒比海盗-黑珍珠号的诅咒-Java复制.rmvb"; //目标文件路径

  long startTime = System.currentTimeMillis(); //获取复制前的系统时间
  copy(src, dst);
  long endTime = System.currentTimeMillis(); //获取复制后的系统时间

  System.out.println("spend time: " + (endTime-startTime) ); //输出复制需要的时间,毫秒计

 }

 //定义一个用于复制文件的静态方法,参数src代表源文件路径,参数dst代表目标文件路径
 public static void copy(String src, String dst) {

  //提供需要读入和写入的文件
  File fileIN = new File(src);
  File fileOUT = new File(dst);

  BufferedInputStream bis = null;
  BufferedOutputStream bos = null;

  try {

   //创建相应的节点流,将文件对象作为形参传递给节点流的构造器
   FileInputStream fis = new FileInputStream(fileIN);
   FileOutputStream fos = new FileOutputStream(fileOUT);

   //创建相应的缓冲流,将节点流对象作为形参传递给缓冲流的构造器
   bis = new BufferedInputStream(fis);
   bos = new BufferedOutputStream(fos);

   //具体的文件复制操作
   byte[] b = new byte[65536]; //把从输入文件读取到的数据存入该数组
   int len; //记录每次读取数据并存入数组中后的返回值,代表读取到的字节数,最大值为b.length;当输入文件被读取完后返回-1
   while( (len=bis.read(b)) != -1 ) {
    bos.write(b, 0, len);
    bos.flush();
   }

  } catch(IOException e) {

   e.printStackTrace();

  } finally {

   //关闭流,遵循先开后关原则(这里只需要关闭缓冲流即可)
   try {
    bos.close();
   } catch (IOException e) {
    e.printStackTrace();
   }

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

[2] 测试结果

测试结果显示,复制3.01GB大小的文件所用的时间约为1min。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • java使用文件流实现查看下载次数

    本文实例为大家分享了java使用文件流实现查看下载次数的具体代码,供大家参考,具体内容如下 需求:点击一个按钮的次数或者是展示文件,游戏被下载的次数 实现:开辟一个流文件,用来保存被下载的次数,然后读文件中value,点击一次value加1,再将此value保存到流文件中. 三种方法: package cn.tr.test; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; imp

  • Java输入输出流实例详解

    本文实例讲述了Java输入输出流.分享给大家供大家参考,具体如下: 字节输出流,输出到文件中(写) OutputStream抽象类 选好文件 复制代码 代码如下: File file = new File("E:" + File.separator + "myFile" + File.separator + "test" + File.separator + "123.txt"); 子类实例化,需要抛异常 稍后传输的数据覆盖原

  • JavaScript之解构赋值的理解

    1. ES6的新特性 允许将对象或者数组'分解'成多个单独的值, 以对象的解构开始. 代码示例 2. 说明 1).  定义一个对象 const obj={b:2,c:3,d:4}; 此时系统中没有变量b, 变量c与变量d 2). 开始解构该对象, const {a,b,c} = obj 这句话的意思是, 定义a,b,c三个变量, 然后在obj对象中寻找a,b,c变量, 如果找到, 则赋值给对应的变量 所以, a, 已定义, 但是未赋值. 定义是在const{a,b,c}中定义的, 而没有在obj

  • Java8的default和static关键字的使用讲解

    1. default和static关键字 a.default 用在接口中, 为该接口的实现类的方法.  --> 不能通过接口直接调用. static 也是用在接口中, 同Class中的static方法一样, 是类级别的方法, 而不是对象的方法.  --> 可以通过接口直接调用. b.一个接口可以有多个default方法, 也可以有多个static方法. 2. default 在使用中的注意事项 如下面的例子 有两个接口, InterA和InterB, 都有一个方法, 为defaultFunct

  • 浅谈JAVA工作流的优雅实现方式

    今天查找线上问题,看到一个让我脑洞大开的工作流实现方式.以前用过责任链模式,也用过模板模式实现类工作流的方式,但是对比这个工具,逊色不少,不卖关子了,就是Apache Commons Chain,它是Command模式与责任链模式的综合体. 1.Apache Commons Chain 中的角色有:chain.context.command. 2.在我们订单系统有这样的业务,就是退票的时候,会根据核损后的订单价格,给客人退钱,但是订单的金额,由几部分组成 有现金.商旅卡.有优惠券.所以根据需求,

  • JavaScript两种计时器的实例讲解

    通过使用 JavaScript,我们有能力做到在一个设定的时间间隔之后来执行代码,而不是在函数被调用后立即执行.我们称之为计时事件.提供了两种计时器的方法如下: window.setInterval(): 这个方法就是在一个周期内反复执行一直到窗口关闭或者 clearInterval() window.setTimeout(); 延迟执行内容 setInterval()的使用方法: setInterval(code,millisec); code:可以是方法名,如果是方法不要加小括号.同时也可以

  • Java中FileOutputStream流的write方法

    本文为大家分享了FileOutputStream流的write方法,供大家参考,具体内容如下 /*------------------------ FileOutputStream: ....//输出流,字节流 ....//write(byte[] b)方法: 将b.length个字节从指定字节数组写入此文件输出流中 ....//write(byte[] b, int off, int len)方法:将指定字节数组中从偏移量off开始的len个字节写入此文件输出流 ---------------

  • Java实现文件和base64流的相互转换功能示例

    本文实例讲述了Java实现文件和base64流的相互转换功能.分享给大家供大家参考,具体如下: import java.io.FileInputStream; import java.io.FileOutputStream; import sun.misc.BASE64Decoder; import sun.misc.BASE64Encoder; /** * 文件与base64的互相转换操作 */ public class testFile { public static void main(S

  • Java内部类及其特点的讲解

    定义在类里面的类就叫做内部类. 内部类的特点: 在内部类中可以直接访问外部类的成员,包括私有的成员 在外部类中不能直接访问内部类的成员,必须通过创建内部类的对象来调用内部类成员 如何创建内部类对象: 内部类名 对象名= new 内部类名(); 对象名.成员名    但是私有化的东西还是不能访问的 可以修饰内部类的修饰符有哪些: private   static 如果通过private 修饰 ,只能在外部类中提供公共的方法对内部类进行访问 如果是static 修饰,如何创建外部类对象 外部类名.内

  • Java中流的有关知识点详解

    什么是流? 流:程序和设备之间连接起来的一根用于数据传输的管道,流就是一根管道. 流的分类: 四大基本抽象流(输入流,输出流,字符流,字节流) 文件流 缓冲流 转换流 数据流     流一定是类,但类不一定是流 print流 object流 按数据流的方向不同可以分为输入流和输出流. 按处理数据单位不同可以分为字节流和字符流.(一个字符是两个字节) 按功能不同可以分为节点(原始)流和处理(包裹)流. 字节流         字符流 输入流      InputStream      Reader

随机推荐