Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2856780
  • 博文数量: 471
  • 博客积分: 7081
  • 博客等级: 少将
  • 技术积分: 5369
  • 用 户 组: 普通用户
  • 注册时间: 2012-01-04 21:55
文章分类

全部博文(471)

文章存档

2014年(90)

2013年(69)

2012年(312)

分类: Java

2014-08-10 10:32:42

在Java编程中,复制文件的方法有很多,而且经常要用到。我以前一直是缓冲输入输出流来实现的(绝大多数人都是如此),近来在研究JDK文档时发现,用文件通道(FileChannel)来实现文件复制竟然比用老方法快了近三分之一。


  1. package importdata.util;

  2. import java.io.File;
  3. import java.io.FileInputStream;
  4. import java.io.FileOutputStream;
  5. import java.io.IOException;
  6. import java.nio.channels.FileChannel;
  7. import java.util.HashMap;
  8. import java.util.Iterator;
  9. import java.util.Map;

  10. /**
  11.  * @Title: FileCopy.java
  12.  * @Package: importdata.util
  13.  * @author: beckham
  14.  * @date 2014-8-10 上午10:01:54
  15.  */
  16. public class FileCopy {

  17.     /**
  18.      * @Description:
  19.      * @param args
  20.      * void
  21.      */
  22.     public static void main(String[] args) {

  23.         System.out.println("begin");
  24.         String fileFileName="E:\\images\\circle\\海报720";
  25.          //改目录下的所有完整文件名<k,v><文件名.jpg,文件全称含路径>
  26.         HashMap<String,String>imagesFileName=UserAccountUtil.getFilePath(fileFileName);
  27.         
  28.         final String targetDir="E:\\images\\circle\\720\\";
  29.         Iterator iter=imagesFileName.entrySet().iterator();
  30.         int i=0;
  31.         int dirIndex=1;
  32.         while(iter.hasNext())
  33.         {
  34.             if(i==230){
  35.                 dirIndex++;
  36.                 i=0;
  37.             }
  38.             Map.Entry entry = (Map.Entry) iter.next();
  39.             String key=(String) entry.getKey();
  40.             String val=(String) entry.getValue();
  41.             String dFilename=targetDir+dirIndex+"\\"+key;
  42.             System.out.println(dFilename+" : "+val);
  43.             File s=new File(val);
  44.             File t=new File(dFilename);
  45.             fileChannelCopy(s,t);
  46.             i++;
  47.         }
  48.         
  49.         System.out.println("the end");
  50.     }

  51.     /**
  52.      *
  53.      * @Description:
  54.      * @param s
  55.      * @param t
  56.      * void
  57.      */
  58.     public static void fileChannelCopy(File s, File t) {
  59.         FileInputStream fi = null;
  60.         FileOutputStream fo = null;
  61.         FileChannel in = null;
  62.         FileChannel out = null;
  63.         try {

  64.             fi = new FileInputStream(s);
  65.             fo = new FileOutputStream(t);
  66.             in = fi.getChannel();// 得到对应的文件通道
  67.             out = fo.getChannel();// 得到对应的文件通道
  68.             in.transferTo(0, in.size(), out);// 连接两个通道,并且从in通道读取,然后写入out通道

  69.         } catch (IOException e) {
  70.             e.printStackTrace();
  71.         } finally {
  72.             try {
  73.                 fi.close();
  74.                 in.close();
  75.                 fo.close();
  76.                 out.close();
  77.             } catch (IOException e) {
  78.                 e.printStackTrace();
  79.             }

  80.         }

  81.     }

  82. }

阅读(3430) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~