用I/O 和递归 拷贝复制文件

 1 public class wenjianfuzhi
 2 {
 3     static File file = new File("F:\\java\\workspace\\Yichang\\src\\");
 4     public static void main(String[] args) throws Exception
 5     {
 6         File[] files = file.listFiles();//l列出所有的子文件和路径
 7         for(File f : files)//遍历当前文件夹里面的所有文件
 8         {    
 9             copy(f);
10         }                    
11     }
12     public static void copy(File file) throws Exception
13     {
14         if(file.isFile())//判断对象是否为文件--不是目录
15         {
16 
17             /**
18              * 1、一定要是文件的时候才处理
19              * 2、当他是文件的时候获取到当前文件的目录:F:\\java\\workspace\\Yichang\\src\\com\\cyg\hyy
20              * 3、判断当前文件所在的文件夹和给定文件夹之间差了什么:F:\\java\\workspace\\Yichang\\src\\com 》cyg\hyy
21              * 4、在d盘下面创建d://差的文件夹 -- 当前文件要拷贝的目录
22              * 5、构建当前要拷贝的文件的路-第四部的到目录+文件的名字
23              * 6、用IO来读和写完成拷贝的工作
24              */
25             String path = file.getParent();//当他是文件的时候获取到当前文件的目录:F:\\java\\workspace\\Yichang\\src\\com\\cyg\hyy
26             String name = path.replace(wenjianfuzhi.file.getAbsolutePath(), "");//判断当前文件所在的文件夹和给定文件夹之间差了什么:F:\\java\\workspace\\Yichang\\src\\com 》cyg\hyy
27             File target = new File ("E:\\",name);//在D盘下面创建D://差的文件夹--当前文件要拷贝的目录
28             if(!target.exists())//判断对象所对应的文件或文件及是否存在,
29             {
30                 target.mkdirs();//如果不存在那么创建
31             }
32             
33             target = new File(target,file.getName());//构建当前要拷贝的文件的路径--第4步的目录+文件的名字
34             FileInputStream in = new FileInputStream(file);//用IO来读写完成拷贝
35             FileOutputStream out = new FileOutputStream(target);
36             byte[] b = new byte[200];//每次读取200个字节
37             int length = in.read(b);//读取到的字节
38             while (length !=-1)
39             {
40                 out.write(b, 0, length);//输出读取到的200字节,读到 多少就输出多少
41                 length = in.read(b);//从201开始去读取200 个字节 如此循环
42             }
43             out.flush();//清除缓存
44             out.close();//关闭流
45             in.close();//关闭流
46         }else//如果不是文件那么执行下面代码
47         {
48             File[] files =file.listFiles();//列出所有子文件和路径
49             for(File file2 : files)//遍历文件和路径
50             {
51                 copy(file2);//
52             }
53         }
54     }        
55 }