java的File和遞歸

:File(掌握)
     (1)爲了方便我們對硬盤上的文件進行操作,java就提供了一個類File供我們使用。

     (2)File類的構造方法

        A:File file = new File("d:\\a.txt");
        B:File file = new File("d:\\","a.txt");
        C:File file = new File("d:\\");
         File file2 = new File(file,"a.txt");
這三種方式表示的意思是等價的。
   (3)File類的功能(請補齊方法名)

A:創建功能
  創建文件 
  File file = new File("d:\\a.txt");
  System.out.println("createNewFile:" + file.createNewFile());
  創建目錄
  File file3 = new File("aaa");
  System.out.println("mkdir:" + file3.mkdir());
  創建多級目錄
  File file4 = new File("bbb\\ccc");
  System.out.println("mkdir:" + file4.mkdirs());
  B:刪除功能
  刪除文件或者目錄
  File file = new File("ddd\\eee\\f.txt");
  System.out.println("delete:" + file.delete());
  C:重命名功能
  把文件重命名
  // 創建文件對象
  File file = new File("a.txt");

  try {
       file.createNewFile();
     } catch (IOException e) {
        e.printStackTrace();
    }

    // 重命名
    File dest = new File("b.txt");
    System.out.println("renameTo:" + file.renameTo(dest));
 D:判斷功能
   File file = new File("b.txt");
   File是否存在
   exists():判斷File對象是否存在
   System.out.println("exists:"+file.exists());
   File是否是文件
   isFile():判斷File對象是否是文件
   System.out.println("isFile:"+file.isFile());
   File是否是目錄
   isDirectory():判斷File對象是否是目錄
   System.out.println("isDirectory:"+file.isDirectory());
   E:獲取功能
   File的絕對路徑
   isAbsolute():判斷File對象是否是絕對路徑
   System.out.println("isAbsolute:"+file.isAbsolute());
   File的相對路徑
   getParent():判斷File對象是否是相對路徑,否則爲null
   System.out.println("getParent:"+file.getParent());
   File的名稱
   F:重要的獲取功能
   String[] list():獲取指定目錄下的目錄或者文件的名稱數組
   File file = new File("d:\\");
   String[] strArray = file.list();
   for (String str : strArray) {
      System.out.println(str);
   }


    String[] list(FilenameFilter filter)
         File file = new File("d:\\");
         // 使用匿名內部類實現   創建了一個實現了文件名稱過濾器接口的對象
         String[] strArray = file.list(new FilenameFilter() {
         @Override
         public boolean accept(File dir, String name) {
              return new File(dir, name).isFile() && name.endsWith(".mp3");
              }
         });


        // 遍歷
        for (String str : strArray) {
             System.out.println(str);
        }


              
     File[] listFiles():獲取指定目錄下的目錄或者文件的File數組
     File[] fileArray = file.listFiles();
     for (File f : fileArray) {
          if (f.isFile()) {
              System.out.println(f.getName());
           }
     }


    File[] listFiles(FilenameFilter filter)

  (4)案例:
          獲取指定目錄下指定後綴的文件的名稱。
          要求使用過濾器,並且是匿名內部類的方式實現。
 File file = new File("test");

          String[] strArray = file.list(new FilenameFilter(){
               public boolean accept(File dir,String name)
               {
                    return new File(dir,name).isFile() && name.endsWith(".java");
               }
          });

          for(String str : strArray)
          {
               System.out.println(str);
          }


    
2:遞歸(理解)
     (1)遞歸:方法定義內部調用方法本身的現象。
          舉例:
               老和尚給小和尚講故事。
               學編程。
     (2)注意事項:
          A:一定要有出口,否則死遞歸。
          B:次數不能過多,否則內存溢出。

          能用循環的地方就不要用遞歸。
     (3)案例:(理解)
          A:遞歸求階乘
              
 public static void main(String[] args) {
               System.out.println(jc(5));

               }
               public static int jc(int n)
               {
               if(n==1 )
               {
                    return 1;
               }
               else
               {
                    return n*jc(n-1);
               }         
               }




          B:遞歸求斐波那契數列(兔子問題 1,1,2,3,5,8...)
              
 public static void main(String[] args) {
               System.out.println(jc(5));

               }
               public static int jc(int n)
               {
               if(n==1 ||n==2 )
               {
                    return 1;
               }
               else
               {
                    return jc(n-1)+jc(n-2);
               }         
               }






          C:遞歸遍歷指定目錄下指定後綴的文件名稱
            
           // 封裝目錄
            File file = new File( "D:\\itcast\\20130428");

             // 寫一個功能實現
             printFilePath(file);
      }

      private static void printFilePath(File file) {
             // 獲取所有File對象數組
            File[] fileArray = file.listFiles();

             // 遍歷
             for (File f : fileArray) {
                   if (f.isDirectory()) {
                         // 如果是文件夾就遞歸
                         printFilePath(f);
                  } else {
                         // 是文件
                         if (f.getName().endsWith( ".java")) {
                               // 滿足是java文件,就輸出該文件的絕對路徑
                              System. out.println(f.getAbsolutePath());
                        }
                  }
            }



          D:遞歸刪除帶內容的目錄     
         
 File file = new File("d:\\test\\day20_digui\\test");
             Filedelete(file);
      }

      private static void Filedelete(File file) {
             // TODO Auto-generated method stub
             File[] fileArray = file.listFiles();
             for ( File f : fileArray) {
                   if (f.isDirectory()) {
                         Filedelete(f);
                  } else { // 刪除文件
                        System. out.println(f.getName() + "***" + f.delete());
                  }

            } // 刪除文件夾
            System. out.println(file.getName() + "***" + file.delete());


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章