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());


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值