黑马程序员技术交流社区

标题: 关于学习 IO 的一点小练习,复制任意目录的内容到指定的目录 [打印本页]

作者: xiaowen_wu    时间: 2015-6-3 12:30
标题: 关于学习 IO 的一点小练习,复制任意目录的内容到指定的目录
  1. import java.io.BufferedInputStream;
  2. import java.io.BufferedOutputStream;
  3. import java.io.File;
  4. import java.io.FileInputStream;
  5. import java.io.FileOutputStream;
  6. import java.io.IOException;

  7. /**
  8. * 这是一个复制某一目录下所有的内容到指定目录下的类
  9. * @author wen
  10. */
  11. public class CopyFiles {

  12.         private static int I = 1;
  13.         /**
  14.          *  这是复制文件的方法
  15.          * @param src  要复制的源路径
  16.          * @param dest  目的地
  17.          */
  18.         public  void getCopyFile(String src, String dest) {
  19.                 // 封装数据源
  20.                 File srcFile = new File(src);
  21.                 // 封装目的地
  22.                 File destFile = new File(dest);

  23.                 // 计算复制时间
  24.                 System.out.println("复制开始,请稍后...");
  25.                 long str = System.currentTimeMillis();

  26.                 CopyFile(srcFile, destFile);

  27.                 long end = System.currentTimeMillis();
  28.                 System.out.println("复制完成,共耗时: " + (end - str) + "毫秒");
  29.         }

  30.         private void CopyFile(File src, File dest) {
  31.                 // 获取src目录下的所有文件
  32.                 File[] file = src.listFiles();
  33.                 // 遍历
  34.                 if (file != null) {
  35.                         for (File f : file) {
  36.                                 if (f.isDirectory()) {
  37.                                         dest = newFile(f, dest);
  38.                                         CopyFile(f, dest);
  39.                                         dest = dest.getParentFile();
  40.                                 } else {
  41.                                        
  42.                                         if (!dest.exists()) {
  43.                                                 dest.mkdirs();
  44.                                         }
  45.                                         try {
  46.                                                 copyFile(f, dest);
  47.                                                 System.out.println("第" + (I++) + "条文件 : "
  48.                                                                 + f.getName());
  49.                                         } catch (IOException e) {
  50.                                                 e.printStackTrace();
  51.                                         }
  52.                                 }
  53.                         }
  54.                 }
  55.         }

  56.         private void copyFile(File f, File dest) throws IOException {
  57.                 // 封装源数据
  58.                 BufferedInputStream bis = new BufferedInputStream(
  59.                                 new FileInputStream(f));
  60.                 // 封装目的地
  61.                 File file = new File(dest, f.getName());
  62.                 BufferedOutputStream bos = new BufferedOutputStream(
  63.                                 new FileOutputStream(file));

  64.                 // 读写数据
  65.                 byte[] bys = new byte[1024];
  66.                 int len = 0;
  67.                 while ((len = bis.read(bys)) != -1) {
  68.                         bos.write(bys, 0, len);
  69.                         bos.flush();
  70.                 }
  71.                 // 释放资源
  72.                 bis.close();
  73.                 bos.close();
  74.         }

  75.         private File newFile(File f, File dest) {
  76.                 // 封装目的地
  77.                 File file = new File(dest, f.getName());
  78.                 file.mkdirs();
  79.                 System.out.println("第" + (I++) + "条文件 : " + file.getName());
  80.                 return file;
  81.         }
  82. }


  83. import java.util.Scanner;

  84. public class CopyFileTest {
  85.         public static void main(String[] args) {
  86.                 Scanner sc = new Scanner(System.in);

  87.                 System.out.println("请输入要复制的文件路径:");
  88.                 String src = sc.nextLine();

  89.                 System.out.println("请输入要复制的文件路径:");
  90.                 String dest = sc.nextLine();

  91.                 CopyFiles cf = new CopyFiles();
  92.                 cf.getCopyFile(src, dest);
  93.         }
  94. }
复制代码





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