黑马程序员技术交流社区

标题: JAVA 用递归思想复制多层目录下的文件 [打印本页]

作者: marcojam    时间: 2015-8-8 21:38
标题: JAVA 用递归思想复制多层目录下的文件
本帖最后由 marcojam 于 2015-8-9 07:37 编辑
  1. package copyrename;

  2. import java.io.BufferedInputStream;
  3. import java.io.BufferedOutputStream;
  4. import java.io.File;
  5. import java.io.FileInputStream;
  6. import java.io.FileOutputStream;
  7. import java.io.IOException;

  8. /*
  9. * 源数据:C:\\源文件
  10. * 目的地:d:\\源文件
  11. * 分析
  12. *    a:获取源文件数组对象
  13. *    b:遍历文件数组对象
  14. *    c:判断是否文件夹
  15. *                    是文件夹:
  16. *                            获取数组对象
  17. *                            遍历
  18. *                                    回到c判断
  19. *                            创建文件夹
  20. *                    不是文件夹:复制新文件
  21. *
  22. */
  23. public class CopyDemo {
  24.         public static void main(String[] args) throws IOException {
  25.                 File ifile = new File("c:\\源文件");
  26.                 File ofile = new File("d:\\");
  27.                 diguicopy(ifile, ofile);
  28.         }

  29.         // 递归法复制多层文件、文件夹
  30.         public static void diguicopy(File file, File destnation) throws IOException {
  31.                 // 在目的地创建该文件夹
  32.                 File newfolder = new File(destnation, file.getName());
  33.                 newfolder.mkdir();
  34.                 // 获取文件对象数组
  35.                 File[] files = file.listFiles();
  36.                 // 遍历该对象数组
  37.                 for (File f : files) {
  38.                         if (f.isDirectory()) {                                
  39.                                 //递归
  40.                                 diguicopy(f, newfolder);

  41.                         } else {
  42.                                 //高效字节数组缓冲流
  43.                                 BufferedInputStream bis = new BufferedInputStream(
  44.                                                 new FileInputStream(f));
  45.                                 BufferedOutputStream bos = new BufferedOutputStream(
  46.                                                 new FileOutputStream(new File(newfolder, f.getName())));
  47.                                 int b = 0;
  48.                                 byte[] by = new byte[1024];
  49.                                 while ((b = bis.read(by)) != -1) {
  50.                                         bos.write(by, 0, b);
  51.                                 }
  52.                                 bos.close();
  53.                                 bis.close();
  54.                         }
  55.                 }
  56.         }
  57. }

复制代码


作者: summe0906    时间: 2015-8-14 23:34
  1. package practice;

  2. import java.io.BufferedInputStream;
  3. import java.io.BufferedOutputStream;
  4. import java.io.File;
  5. import java.io.FileInputStream;
  6. import java.io.FileOutputStream;
  7. import java.io.IOException;

  8. public class Test2 {

  9.         public static void main(String[] args) throws IOException {
  10.                 File f1 = new File("F:\\111");
  11.                 File f2 = new File("E:\\111");
  12.                 if (!f2.exists()) {
  13.                         f2.mkdir();
  14.                 }
  15.                 copyfile(f1, f2);
  16.         }

  17.         private static void copyfile(File f1, File f2) throws IOException {
  18.                 File[] files = f1.listFiles();
  19.                 for (File f : files) {
  20.                         String name = f.getName();
  21.                         if (f.isDirectory()) {
  22.                                 File f3 = new File(f2 + "\\" + name);
  23.                                 f3.mkdir();
  24.                                 copyfile(f, f3);
  25.                         } else {
  26.                                 File f4 = new File(f2, name);
  27.                                 copy(f, f4);
  28.                         }
  29.                 }
  30.         }

  31.         private static void copy(File f, File f4) throws IOException {
  32.                 BufferedInputStream bis = new BufferedInputStream(new FileInputStream(f));
  33.                 BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(f4));
  34.                 int len = 0;
  35.                 byte[] bytes = new byte[1024];
  36.                 while ((len = bis.read(bytes)) != -1) {
  37.                         bos.write(bytes, 0, len);
  38.                 }
  39.                 bos.close();
  40.                 bis.close();
  41.         }

  42. }
复制代码

作者: cemabenteng    时间: 2015-8-14 23:56
这是你做的还是从网上找到的,基础班的视频应该不是这么讲的
作者: 风华正茂    时间: 2015-8-15 18:03
楼主写得不错,赞一个
作者: marcojam    时间: 2015-8-15 23:24
cemabenteng 发表于 2015-8-14 23:56
这是你做的还是从网上找到的,基础班的视频应该不是这么讲的

这就是老师讲的啊,然后自己理解敲出来的,跟老师有点小区别,不过思路都一样




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