黑马程序员技术交流社区

标题: (分享给初学者,大神勿喷)复制文件夹下所有文件以及子目... [打印本页]

作者: boycechan    时间: 2015-1-10 22:08
标题: (分享给初学者,大神勿喷)复制文件夹下所有文件以及子目...
  1. import java.io.File;
  2. import java.io.BufferedInputStream;
  3. import java.io.BufferedOutputStream;
  4. import java.io.FileInputStream;
  5. import java.io.FileOutputStream;
  6. import java.io.IOException;
  7. //自己用EditPlus写的,绝非copy
  8. class CopyAllFiles
  9. {
  10.         public static void main(String[] args)
  11.         {
  12.                 //源目录
  13.                 File srcFolder=new File("D:\\KwDownload");
  14.                 //目的地目录
  15.                 File destFloder=new File("E:\\music");               
  16.                 long startTime=System.currentTimeMillis();
  17.                 //将源目录下的所有文件及文件夹复制到指定目录
  18.                 boolean flag=copyAllFiles(srcFolder,destFloder);
  19.                 long endTime=System.currentTimeMillis();
  20.                 long resultTime=endTime-startTime;               
  21.                 if(flag)
  22.                 {
  23.                         System.out.println("复制成功!共用时"+resultTime+"毫秒("+(resultTime/1000)+"秒)");
  24.                 }
  25.         }
  26.        
  27.         /**
  28.          * 文件及文件夹复制工具
  29.          * @param src 源目录
  30.          * @param dest 目的地目录
  31.          * @return flag 返回true表示复制成功,否则复制失败
  32.          */
  33.         public static boolean copyAllFiles(File src,File dest)
  34.         {
  35.                 boolean flag=false;
  36.                 if(!dest.exists())
  37.                 {
  38.                         dest.mkdir();
  39.                 }
  40.                 File[] fileArr=src.listFiles(); //将源目录下的对象封装进File数组
  41.                 for(File f:fileArr)          //遍历File中的对象
  42.                 {
  43.                         if(f.isDirectory())  //判断File对象是否是目录
  44.                         {
  45.                                 File newFolder=new File(dest,f.getName());
  46.                                 newFolder.mkdir(); //创建目的地目录创建遍历到的文件夹
  47.                                 copyAllFiles(f,newFolder);  //如果遍历到的是目录,递归循环操作
  48.                                 //System.out.println(f.getName()+"---"+newFolder.getName());
  49.                         }
  50.                         else
  51.                         {
  52.                                 //调用字节流复制方法
  53.                                 //CopyBinaryFile(f.getAbsolutePath(),dest.getAbsolutePath().concat("\\").concat(f.getName()));
  54.                                 CopyBinaryFile(f.getAbsolutePath(),new File(dest,f.getName()).getAbsolutePath());
  55.                                 //System.out.println(f.getAbsolutePath());                               
  56.                                 //System.out.println(new File(dest,f.getName()).getAbsolutePath());
  57.                         }
  58.                         if(f!=null)
  59.                         {
  60.                                 flag=true;
  61.                         }
  62.                 }               
  63.                 return flag;
  64.         }
  65.         /**
  66.          * 字节流文件复制工具
  67.          * @param src 数据源
  68.          * @param dest 目的地
  69.          * @return flag 如果为true,表示复制成功,否则,复制失败。
  70.          */
  71.        
  72.         public static boolean CopyBinaryFile(String src,String dest)
  73.         {
  74.                 boolean flag=false;               
  75.                 BufferedInputStream bis=null;               
  76.                 BufferedOutputStream bos=null;
  77.                 try
  78.                 {
  79.                         bis=new BufferedInputStream(new FileInputStream(src));
  80.                         bos=new BufferedOutputStream(new FileOutputStream(dest));
  81.                         byte[] bys=new byte[1024];
  82.                         int len=0;
  83.                         while((len=bis.read(bys))!=-1)
  84.                         {
  85.                                 //写入数据
  86.                                 bos.write(bys,0,len);
  87.                         }
  88.                 }
  89.                 catch (IOException ioe)
  90.                 {
  91.                         ioe.printStackTrace();
  92.                 }
  93.                 finally
  94.                 {
  95.                         if(bos!=null)
  96.                         {
  97.                                 try
  98.                                 {
  99.                                         //释放资源
  100.                                         bos.close();
  101.                                 }
  102.                                 catch (IOException ioe)
  103.                                 {
  104.                                         ioe.printStackTrace();
  105.                                 }
  106.                         }
  107.                         if(bis!=null)
  108.                         {
  109.                                 try
  110.                                 {
  111.                                         //释放资源
  112.                                         bis.close();
  113.                                         flag=true;
  114.                                 }
  115.                                 catch (IOException ioe)
  116.                                 {
  117.                                         ioe.printStackTrace();
  118.                                 }
  119.                         }                       
  120.                 }               
  121.                 return flag;
  122.         }
  123. }
复制代码


作者: wangcongwu    时间: 2015-1-10 23:17
你这个不是面向对象了,是面向过程了
作者: boycechan    时间: 2015-1-11 00:00
wangcongwu 发表于 2015-1-10 23:17
你这个不是面向对象了,是面向过程了

分享个思路而已,难道我还抽取几个类出来?发文件上传?有必要么?就算是面向对象这也只算是个工具类,也是用静态方法,用类名,方法名调用。
作者: 随影    时间: 2015-1-11 21:25
谢谢分享
作者: 荭蕾    时间: 2015-1-12 21:43
看着很实用




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2