复制文件夹及其包含的子文件或子文件夹

 1 package com.hxl;
 2 
 3 import java.io.BufferedInputStream;
 4 import java.io.BufferedOutputStream;
 5 import java.io.File;
 6 import java.io.FileInputStream;
 7 import java.io.FileOutputStream;
 8 import java.io.IOException;
 9 
10 /**
11  * 
12  * @author Schiller_Hu
13  * @version v1.0
14  * 
15  *          分析: 
16  *              A:封装数据源File 
17  *              B:封装数据目的地File 
18  *              C:判断该File是文件夹还是文件 
19  *                  a:是文件夹 
20  *                      就在目的地目录创建该文件夹
21  *                      获取该File对象下的所有文件或者文件夹File对象 遍历得到每一个File对象 
22  *                      回到C 
23  *                  b:是文件 
24  *                      直接复制
25  *          
26  */
27 public class Test {
28     public static void main(String[] args) throws IOException {
29         // 源路径
30         File srcFile = new File("E:\\工作学习\\计算机杂类\\Java Web开发\\Web基础\\JavaScript & jQuery精品教程视频");
31         // 目标路径
32         File destFile = new File("E:\\");
33         // 调用方法
34         copyFolder(srcFile, destFile);
35     }
36 
37     public static void copyFolder(File srcFile, File destFile) throws IOException {
38         // 判断File对象是否是文件夹
39         if (srcFile.isDirectory()) {
40             // 拼接新文件夹所在路径
41             File newFolder = new File(destFile, srcFile.getName());
42             // 创建文件夹
43             newFolder.mkdir();
44             // 遍历源路径下的所有File对象
45             File[] fileArray = srcFile.listFiles();
46             for (File file : fileArray) {
47                 // 递归调用
48                 copyFolder(file, newFolder);
49             }
50         } else {
51             // 拼接新文件所在路径
52             File newFile = new File(destFile, srcFile.getName());
53             // 调用方法,复制文件
54             copyFile(srcFile, newFile);
55         }
56     }
57 
58     // 高效字节流一次读取一个字节数组复制文件
59     public static void copyFile(File srcFile, File newFile) throws IOException {
60         // 数据源
61         BufferedInputStream bis = new BufferedInputStream(new FileInputStream(
62                 srcFile));
63         // 目的位置
64         BufferedOutputStream bos = new BufferedOutputStream(
65                 new FileOutputStream(newFile));
66         // 定义单次读取字节数组的大小,一般就写1024
67         byte[] bys = new byte[1024];
68         // read(byte[] bys)方法返回值为获取到的字节个数,若没有获取到,则返回-1
69         int length = 0;
70         while ((length = bis.read(bys)) != -1) {
71             // write(byte[] bys,int off,int length)方法指的是从指定字节数组的指定位置开始写入(复制到)文件
72             bos.write(bys, 0, length);
73         }
74         // 关闭输出流
75         bos.close();
76         // 关闭输入流
77         bis.close();
78     }
79 }

 

posted @ 2018-02-23 21:57  Schiller_Hu  阅读(881)  评论(0编辑  收藏  举报