1 package cn.itsource.homework;
 2 
 3 import java.io.File;
 4 import java.io.FileInputStream;
 5 import java.io.FileOutputStream;
 6 import java.util.ArrayList;
 7 /**
 8  * 需求:编写程序将D盘XML文件夹中所有以“avi”结尾的文件考入到E盘(通过代码建文件夹保存文件)
 9  * 
10  * 
11  * */
12 public class CopyHM3 {
13 
14     public static void main(String[] args) throws Exception {
15         //选择要复制的文件
16          File file = new File("d:/XML");
17          //调用下面的方法,得到我们所想要的所有文件
18          getFiles(file);
19          //新建一个文件放我们要复制的类容
20          File file2 = new File("e:/java学习");
21          file2.mkdirs();
22          //遍历装有文件的数组
23          for (File f : list) {
24              //得到每个文件的名字
25              String name = f.getName();
26              //在新文件夹中创建相同名字的文件
27              File file3 = new File(file2, name);
28               file3.createNewFile();
29               //字节输入流 从磁盘到内存
30               FileInputStream inputStream = new FileInputStream(f);
31               //字节输出流 从内存到磁盘
32               FileOutputStream outputStream = new FileOutputStream(file3);
33               byte[] b =new byte[1024];
34               int num;
35               while((num=inputStream.read(b))!=-1){
36                   outputStream.write(b);
37               }
38               //关流,先开后关
39               outputStream.close();
40               inputStream.close();    
41         }
42          
43     }
44     //新建一个数组 将文件放入
45      static  ArrayList<File> list =new ArrayList<File>();
46     public static void getFiles(File f){
47         //判断文件夹是否为空
48         if(f!=null){
49             //不为空判断是否是文件
50              if(f.isFile()){
51                  //获得文件名字,判断文件结尾
52                  if( f.getName().endsWith(".avi")){
53                      //将符合条件的文件放如数组中
54                      list.add(f); 
55                  }    
56             //传入的是文件夹的情况
57              }else {
58                  //获取文件夹中所有文件,放入数组中
59                  File[] files = f.listFiles();
60                  //判断是否为空文件夹
61                  if(files.length!=0){
62                      //遍历数组
63                      for (File file : files) {
64                          //递归,继续执行方法
65                         getFiles(file);
66                     }
67                      
68                  }
69             }
70         }
71         
72     }
73 }