java——用递归和IO流来实现文件的复制

 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 }

 

posted on 2016-04-12 23:51  揉碎的青春  阅读(390)  评论(0编辑  收藏  举报

导航