1 package IO流;
2
3 import java.io.*;
4
5 public class Test03_完成文件夹的拷贝 {
6 public static void main(String[] args) throws Exception {
7 //源文件路径
8 File f1 = new File("F:\\Maven\\smbms");
9 //目标文件路径
10 File f2 = new File("H:\\Test\\Demo");
11
12 //调用方法进行拷贝
13 //folderCopy(f1, f2);
14
15 deleteFile(f2);
16 }
17
18
19 /**
20 * 递归拷贝文件夹
21 *
22 * @param oldFile 源文件夹
23 * @param newFile 目标文件夹
24 */
25 private static void folderCopy(File oldFile, File newFile) {
26 //判断目标文件夹是否存在
27 if (!newFile.exists()) {
28 newFile.mkdirs();
29 }
30 //获得源文件夹所有子文件
31 File[] srcFiles = oldFile.listFiles();
32 for (File srcFile : srcFiles) {
33 //创建复制目标文件
34 File targetFile = new File(newFile.getAbsoluteFile() + "/" + srcFile.getName());
35 if (srcFile.isDirectory()) {
36 //源文件为文件夹,目标文件创建文件夹
37 targetFile.mkdir();
38 //递归
39 folderCopy(srcFile, targetFile);
40 } else {
41 //不是文件夹,复制该文件(此处可以抽取为赋值文件方法)
42 FileInputStream fis = null;
43 FileOutputStream fos = null;
44 try {
45 fis = new FileInputStream(srcFile);
46 fos = new FileOutputStream(targetFile);
47 byte[] bytes = new byte[1024];
48 int len = 0;
49 while ((len = fis.read(bytes)) != -1) {
50 fos.write(bytes, 0, len);
51 fos.flush();
52 }
53 } catch (Exception e) {
54 e.printStackTrace();
55 } finally {
56 //关闭流
57 if (fos != null) {
58 try {
59 fos.close();
60 } catch (IOException e) {
61 e.printStackTrace();
62 }
63 }
64 if (fis != null) {
65 try {
66 fis.close();
67 } catch (IOException e) {
68 e.printStackTrace();
69 }
70 }
71 }
72
73 }
74 }
75 }
76
77
78 /**
79 * 递归删除文件夹
80 *
81 * @param file
82 */
83 public static void deleteFile(File file) {
84 //判断路径是否存在
85 if (file.exists()) {
86 //测试此抽象路径名表示的文件是否是一个标准文件。
87 if (file.isFile()) {
88 file.delete();
89 } else {//不是文件,对于文件夹的操作
90 //返回file路径下所有文件和文件夹的绝对路径
91 File[] listFiles = file.listFiles();
92 for (File file2 : listFiles) {
93 /*
94 * 递归作用:由外到内先一层一层删除里面的文件 再从最内层 反过来删除文件夹
95 * 注意:此时的文件夹在上一步的操作之后,里面的文件内容已全部删除
96 * 所以每一层的文件夹都是空的 ==》最后就可以直接删除了
97 */
98 deleteFile(file2);
99 }
100 file.delete();
101 }
102 } else {
103 System.out.println("该file路径不存在!!");
104 }
105 }
106 }