首页 > 代码库 > IO流的练习3 复制多级文件夹下的指定文件并改名

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     }

 

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