1 import java.io.ByteArrayInputStream;
2 import java.io.ByteArrayOutputStream;
3 import java.io.File;
4 import java.io.FileInputStream;
5 import java.io.FileOutputStream;
6 import java.io.IOException;
7 import java.io.InputStream;
8 import java.io.OutputStream;
9
10 /**
11 * 文件的复制:
12 * 思路:通过递归实现文件目录的复制,通过流的来复制文件。
13 * 方法:
14 * 1.遍历目录和文件,如果为目录则先复制目录及其子目录到指定目录下。
15 * 2.如果非目录则通过流的形式将该目录下的文件复制到指定目录下。
16 * 3.调用自身方法,实现递归。
17 * 4.如此实现复制目录及其目录下的所有子目录和文件到指定目录下。
18 * 用到的技术:
19 * 用File类来实现文件目录的复制。IO流来实现文件文本的复制
20 * @author user
21 *
22 */
23
24 public class CopyFileTest {
25
26 public static void main(String[] args) {
27 String srcPath = "E:\\Workspaces\\day16";
28 String destPath = "F:\\Workspaces\\day16";
29 File src = new File(srcPath); //源文件
30 File dest = new File(destPath); //目的文件
31
32 try {
33 copyFolder(src, dest);
34 } catch (IOException e) {
35 // TODO Auto-generated catch block
36 e.printStackTrace();
37 }
38 System.out.println("程序执行完毕");
39 }
40
41 private static void copyFolder(File src, File dest) throws IOException {
42 if (src.isDirectory()) { //判读是否目录
43 if (!dest.exists()) { //判断路径名是否存在
44 dest.mkdirs(); //创建文件目录及其子目录
45 }
46 //src.list()返回一个字符串数组,这些字符串指定此抽象路径名表示的目录中的文件和目录。
47 String files[] = src.list(); //创建字符串数组,存储文件路径
48 //遍历文件目录
49 for (String file : files) {
50 //根据 parent 抽象路径名和 child 路径名字符串创建一个新 File 实例
51 File srcFile = new File(src, file);
52 File destFile = new File(dest, file);
53 // 递归复制
54 copyFolder(srcFile, destFile);
55 }
56 } else {
57 //创建流对象
58 InputStream in = new FileInputStream(src);
59 OutputStream out = new FileOutputStream(dest);
60
61 //创建一个byte数组用做缓冲区
62 byte[] buffer = new byte[1024];
63
64 //将数据加入buffer数组
65 in.read(buffer);
66
67 //将数据加载入缓存区中
68 ByteArrayInputStream bis = new ByteArrayInputStream(buffer);
69
70 //实例化一个ByteArrayOutputStream
71 ByteArrayOutputStream bos = new ByteArrayOutputStream();
72
73 //定义一个字符串数据
74 String str = bis.toString();
75 //定义一个byte[]数组
76 byte[] b = str.getBytes();
77 //将b的内容拷贝到缓冲区
78 bos.write(b, 0, b.length);
79 //获取当前缓冲区的大小
80 System.out.println(bos.size());
81
82 //将缓冲区的数据写入到OutputStream中
83 bos.writeTo(out);
84
85 //关闭流
86 in.close();
87 out.close();
88 }
89 }
90
91 }