[Js-Java SE]文件/文件夹复制(递归)

代码如下:

 1 package com.neu.core;
 2 
 3 import java.io.File;
 4 import java.io.FileInputStream;
 5 import java.io.FileNotFoundException;
 6 import java.io.FileOutputStream;
 7 import java.io.IOException;
 8 
 9 public class RecursiveCopy {
10 
11     public static void main(String[] args) {
12         String source = "C:\Users\imsha\Desktop\软件测试-wcn\";
13         String target = "E:\test\";
14         int retVal = recursiveCopy(source, target);
15         if (retVal != -1) {
16             System.out.println("共复制" + retVal + "个文件");
17         } else {
18             System.out.println("复制失败!源路径不存在或目标路径已存在!");
19         }
20     }
21 
22     public static int recursiveCopy(String source, String target) {
23         File sou = new File(source);
24         File tar = new File(target);
25         File temp = null;
26         // 记录改变的文件数
27         int retVal = 0;
28         // 源文件不存在或者目标路径已存在则退出,返回-1
29         if (!sou.exists() || tar.exists()) {
30             return -1;
31         }
32         // 获取源文件下文件列表
33         String[] fs = sou.list();
34         // 创建目标目录
35         tar.mkdirs();
36         for (int i = 0; i < fs.length; i++) {
37             // 构建源目录文件名
38             if (source.endsWith(File.separator)) {
39                 temp = new File(source + fs[i]);
40             } else {
41                 temp = new File(source + File.separator + fs[i]);
42             }
43             // 文件复制
44             if (temp.isFile()) {
45                 FileInputStream input = null;
46                 FileOutputStream output = null;
47                 try {
48                     String path = null;
49                     input = new FileInputStream(temp);
50                     if (target.endsWith(File.separator)) {
51                         path = target + (temp.getName()).toString();
52                     } else {
53                         path = target + File.separator + (temp.getName()).toString();
54                     }
55                     output = new FileOutputStream(path);
56                     byte[] b = new byte[1024 * 5];
57                     int len;
58                     while ((len = input.read(b)) != -1) {
59                         output.write(b, 0, len);
60                     }
61                     output.flush();
62                     System.out.println("将【" + temp.getAbsolutePath() + "】复制到【" + path + "】");
63                 } catch (FileNotFoundException e) {
64                     e.printStackTrace();
65                 } catch (IOException e) {
66                     e.printStackTrace();
67                 } finally {
68                     // 关闭文件流
69                     try {
70                         output.close();
71                     } catch (IOException e) {
72                         e.printStackTrace();
73                     }
74                     try {
75                         input.close();
76                     } catch (IOException e) {
77                         e.printStackTrace();
78                     }
79                 }
80                 retVal += 1;
81             }
82             // 如果是文件夹,则递归调用
83             if (temp.isDirectory()) {
84                 retVal += recursiveCopy(
85                         source.endsWith(File.separator) ? source + fs[i] : source + File.separator + fs[i],
86                         target.endsWith(File.separator) ? target + fs[i] : target + File.separator + fs[i]);
87             }
88         }
89 
90         return retVal;
91     }
92 
93 }

运行结果如下:

 1 将【C:UsersimshaDesktop软件测试-wcnChapter1 Software Testing Introduction.ppt】复制到【E:	estChapter1 Software Testing Introduction.ppt】
 2 将【C:UsersimshaDesktop软件测试-wcnChapter2 Black-Box Testing.ppt】复制到【E:	estChapter2 Black-Box Testing.ppt】
 3 将【C:UsersimshaDesktop软件测试-wcnChapter3 White-box Testing.ppt】复制到【E:	estChapter3 White-box Testing.ppt】
 4 将【C:UsersimshaDesktop软件测试-wcnChapter4 Unit Testing.ppt】复制到【E:	estChapter4 Unit Testing.ppt】
 5 将【C:UsersimshaDesktop软件测试-wcnChapter5 Integration Testing.ppt】复制到【E:	estChapter5 Integration Testing.ppt】
 6 将【C:UsersimshaDesktop软件测试-wcnChapter6 System Testing.ppt】复制到【E:	estChapter6 System Testing.ppt】
 7 将【C:UsersimshaDesktop软件测试-wcnChapter7 Performance Testing.ppt】复制到【E:	estChapter7 Performance Testing.ppt】
 8 将【C:UsersimshaDesktop软件测试-wcnChapter8 Object-oriented Software Testing and Web system Testing.ppt】复制到【E:	estChapter8 Object-oriented Software Testing and Web system Testing.ppt】
 9 将【C:UsersimshaDesktop软件测试-wcnChapter9 Software Testing Management and Automation.ppt】复制到【E:	estChapter9 Software Testing Management and Automation.ppt】
10 将【C:UsersimshaDesktop软件测试-wcnjava排序Bubble.java】复制到【E:	estjava排序Bubble.java】
11 将【C:UsersimshaDesktop软件测试-wcnjava排序DoubleBubbleSort.java】复制到【E:	estjava排序DoubleBubbleSort.java】
12 将【C:UsersimshaDesktop软件测试-wcnjava排序Heap.java】复制到【E:	estjava排序Heap.java】
13 将【C:UsersimshaDesktop软件测试-wcnjava排序Insertion.java】复制到【E:	estjava排序Insertion.java】
14 将【C:UsersimshaDesktop软件测试-wcnjava排序Merge.java】复制到【E:	estjava排序Merge.java】
15 将【C:UsersimshaDesktop软件测试-wcnjava排序Quick.java】复制到【E:	estjava排序Quick.java】
16 将【C:UsersimshaDesktop软件测试-wcnjava排序Radix.java】复制到【E:	estjava排序Radix.java】
17 将【C:UsersimshaDesktop软件测试-wcnjava排序Selection.java】复制到【E:	estjava排序Selection.java】
18 将【C:UsersimshaDesktop软件测试-wcnjava排序Shell.java】复制到【E:	estjava排序Shell.java】
19 将【C:UsersimshaDesktop软件测试-wcnjava排序Sort.java】复制到【E:	estjava排序Sort.java】
20 将【C:UsersimshaDesktop软件测试-wcnOracle-张苏欣1第一章 关系型数据库简介.pdf】复制到【E:	estOracle-张苏欣1第一章 关系型数据库简介.pdf】
21 将【C:UsersimshaDesktop软件测试-wcnOracle-张苏欣2第二章 数据查询.pdf】复制到【E:	estOracle-张苏欣2第二章 数据查询.pdf】
22 将【C:UsersimshaDesktop软件测试-wcnOracle-张苏欣3第三章 数据操纵.pdf】复制到【E:	estOracle-张苏欣3第三章 数据操纵.pdf】
23 将【C:UsersimshaDesktop软件测试-wcnOracle-张苏欣4第四章 表和视图.pdf】复制到【E:	estOracle-张苏欣4第四章 表和视图.pdf】
24 将【C:UsersimshaDesktop软件测试-wcnOracle-张苏欣5第五章 其他数据库对象.pdf】复制到【E:	estOracle-张苏欣5第五章 其他数据库对象.pdf】
25 将【C:UsersimshaDesktop软件测试-wcnpresentation.ppt】复制到【E:	estpresentation.ppt】
26 将【C:UsersimshaDesktop软件测试-wcn增补1.ppt】复制到【E:	est增补1.ppt】
27 将【C:UsersimshaDesktop软件测试-wcn增补2.ppt】复制到【E:	est增补2.ppt】
28 将【C:UsersimshaDesktop软件测试-wcn完整版课件.rar】复制到【E:	est完整版课件.rar】
29 共复制28个文件
原文地址:https://www.cnblogs.com/jiasq/p/8533113.html