java复制文件高效处理方式

1.实现输出读取文件内容的示列(不推荐使用低效):

@Test
 public void testStream(){
  InputStream fis=null;    //声明输入流对象
  OutputStream fos=null;   //声明输出流对象
  try {
   fis=new FileInputStream("d:\\ff_copy.txt");
   fos=new FileOutputStream("d:\\ff_copy1.txt");
   long num=0;          //读取字节计数
   int bt=0;            //每次读入字节内容
   //当读入文件末尾时,读入数据的值为-1,每次读入一个字节,存放变量bt中,直到读完整个文件
   while((bt=fis.read())!=-1){
    //以字母的形式逐个输出文件的每个字节
    System.out.println((char) bt);
    fos.write(bt);  //将字节写入输出流中,实现copy功能
    num++;
   }
   System.out.println("读取的字节数为"+num+"\n 文件复制成功");
   
  } catch (FileNotFoundException e) {
   // TODO Auto-generated catch block	
   e.printStackTrace();
  } catch (IOException e) {
   // TODO Auto-generated catch block	 
   e.printStackTrace();
  }finally{
   try {
    fis.close();
    fos.close();
   } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   }	
  }
 }

 2.使用缓冲流来实现(一般):

/*
  * 字节流测试:copy文件
  */
    @Test
    public void tsetBufferStream() {
     InputStream fis=null;
     OutputStream fos=null;
     try {
   fis=new BufferedInputStream(new FileInputStream("d:\\ff_copy.txt"));
   fos=new BufferedOutputStream(new FileOutputStream("d:\\ff_copy2.txt"));
      byte[] bur=new byte[2048];
   int i;
      while((i=fis.read())!=-1){
       fos.write(bur,0,i);
      }
     } catch (Exception e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  } 
     finally{
       try {
     fis.close();
     fos.close();
    } catch (IOException e) {
     // TODO Auto-generated catch block
     e.printStackTrace();
    }  	   
     }   
    }

 3.使用同道的方式:高效(推荐使用这种方式)

@Test
 public void testFileChanne(){
  FileInputStream fi = null;
  FileOutputStream fo = null;
  FileChannel in = null;
  FileChannel out = null;
  try {
   fi = new FileInputStream("d:\\ff_copy.txt");
   fo = new FileOutputStream("d:\\ff_copy3.txt");
   in = fi.getChannel();//得到对应的文件通道
   out = fo.getChannel();//得到对应的文件通道
   in.transferTo(0, in.size(), out);//连接两个通道,并且从in通道读取,然后写入out通道
  } catch (IOException e) {
   e.printStackTrace();
  } finally {
   try {
    fi.close();
    in.close();
    fo.close();
    out.close();
   } catch (IOException e) {
    e.printStackTrace();
   }
  }
 }

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值