黑马程序员--第四篇 IO练习题分析总结

                                      第四篇  IO练习题分析总结

 

今天是2015年11月13日星期五,我来谈谈在练习中的一些感想。今天的练习题是:

复制单级文件夹"E:\\sound" 目录下的.wav文件到 “E:\\juice”目录下,并改名为.mp4后缀。下面是我的分析和实现过程。

public class CopyFolder {

 

  /**  * @param args

   * @throws IOException

   */

  public static void main(String[] args) throws IOException {

            /*  //思路:1,获取到每一个文件的file对象,

                     2,如果没有,就创建一个juice文件夹。

                     3, 获取到每一个juice里面文件的File对象

                     4,最后写一个循环,把源文件复制到目标文件中。

5,将复制过去的文件进行改名*/

     File srcFolder=new File("e:\\sound");

     File destiFolder=new File("e:\\juice");//封装源文件,目的地。

     if(!destiFolder.exists()){

       destiFolder.mkdir();        //如果目的地文件夹存在,就不创建,否则就要创建,因为它是文件夹,当你用输出流写出时并不会帮你创建文件夹,只是帮你创建文件而已,不要记混淆了。

     }

     //获取源文件下的.wav文件的file数组,并获取每一个file对象,

     File[] file=srcFolder.listFiles(new FilenameFilter(){

 

       @Override

       public boolean accept(File dir, String name) {

        

         return new File(dir,name).isFile()&&name.endsWith(".wav");

       }

      

     });//这里使用了筛选功能,直接只留下你设置条件后的文件。其二:由于形参是一个接口名,所以只需传入接口的匿名内部类即可。

     for(File f:file){

       //System.out.println(f);

       //难点:怎么表示juice下面文件的file,应该是“e:\\juice\\文件”

       String fileName=f.getName();

       File destfile=new File(destiFolder,fileName);

       //f就是原文件下的所有文件的file对象,destfile就是目的地下所有文件的file对象

       copyfile(f,destfile);

      

     }   

     //对目的地的文件进行改名

       //获取目录下的所有文件的file数组

   File[] last= destiFolder.listFiles();

     for(File file2:last){

         String newName=file2.getName().replace(".wav", ".mp4");

         File newfile=new File(destiFolder,newName);

         System.out.println(newfile);

         //一定要记得改file对象名,才生效。

         file2.renameTo(newfile);

     }

    

    

    

    

    

     }

  private static void copyfile(File f, File destfile) throws IOException {

     BufferedInputStream bis=new BufferedInputStream(new FileInputStream(f));

     BufferedOutputStream bos=new BufferedOutputStream(new FileOutputStream(destfile));

     byte []by=new byte[1024];

     int len=0;

     while((len=bis.read(by))!=-1){

       bos.write(by, 0, len);

     }

     bis.close();

     bos.close();

    

    

    

  }

 

}

    

    

  总结:这道题容纳了file类里面的许多方法,和知识,以及包含了高效输入输出流,是一道很强的综合题,建议以后多复习。把基础打牢。才能不变应万变。

        另外,我发现刚开始学的时候,其实感觉思维还是很清楚的,只是用代码去实现时,却感觉磕磕碰碰的,主要原因还是对方法不熟,对代码不熟,所以学编程还是要多练习,孰能生巧。

posted on 2015-11-16 20:19  大势  阅读(36)  评论(0)    收藏  举报