IO流的练习3 —— 复制多级文件夹下的指定文件并改名

需求:复制指定目录下的指定文件,并修改后缀名。
    指定的文件是:.java文件。
    指定的后缀名是:.jad
   数据源所在文件夹:C:\Users\Administrator\Desktop\记录
   目的地所在文件夹:C:\Users\Administrator\Desktop\新建文件夹\copy

分析
  A:封装数据源的目录    B:封装目的地的目录
      判断路径下的文件是否是文件夹
        是:在目的文件夹下创建该文件,
          获取数据源所在文件夹的所有文件的File数组
          遍历File数组,得到每个文件的File对象

        不是:再对其后缀进行判断是否是.java

            是:进行改名并复制

            不是:无视


代码:

1、首先写main方法:

 1     public static void main(String[] args) throws IOException {
 2         //封装目录
 3         File start = new File("C:\\Users\\Administrator\\Desktop\\记录");
 4         File end = new File("C:\\Users\\Administrator\\Desktop\\新建文件夹\\copy");
 5         
 6         //如果目的地文件夹不存在,则创建
 7         if(!end.exists()){
 8             end.mkdir();
 9         }
10         
11         //复制文件夹
12         copyFolder(start,end);        
13     }

 

2、判断是否是文件夹,并对文件夹进行复制的方法

 1     private static void copyFolder(File start, File end) throws IOException {
 2         // 由于start是文件夹,所以开始不必获取File数组,直接进行判断
 3         if(start.isDirectory()){
 4             //是文件夹
 5             
 6             //首先在目的文件夹下创建不同路径,同样名称的文件夹
 7             File newFolder = new File(end,start.getName());
 8             newFolder.mkdir();
 9             
10             //获取该文件夹下的所有文件或文件夹的File数组
11             File[] f = start.listFiles();
12             for(File file : f){
13                 //再重新执行判断是否是文件夹
14                 copyFolder(file,newFolder);
15             }
16             
17         }else{
18             //是文件
19             //判断是否是.java后缀的,是的话就改名,不是则丢掉
20             String name = start.getName();
21             if(name.endsWith(".java")){
22                 String newname = name.replace(".java", ".jad");
23                 File newfile = new File(end,newname);
24                 
25                 //进行复制
26                 copyfile(start,newfile);
27             }

 

3、判断文件后缀是否是.java,并对它的数据进行复制

 1     private static void copyfile(File start, File newfile) throws IOException {
 2         //因为任意格式的,所以用缓冲字节流
 3         BufferedInputStream bi = new BufferedInputStream(new FileInputStream(start));
 4         BufferedOutputStream bo = new BufferedOutputStream(new FileOutputStream(newfile));
 5         
 6         //获取数据
 7         byte[] by = new byte[1024];
 8         int len = 0;
 9         while((len = bi.read(by)) != -1){
10             bo.write(by,0,len);
11         }
12         bi.close();
13         bo.close();    
14     }

 

posted @ 2016-10-02 10:51  卡拉瓦  阅读(823)  评论(0编辑  收藏  举报