File类、递归

01.第一章:File类_概述:

1).java.io.File(类):File类可以操作磁盘上的文件、目录。
    1).可以创建、删除文件/目录。
    2).可以获取文件/目录的一些属性信息;最后修改时间、是否可读、可写..
2).File类不能对“文件内容”进行读写(后期使用IO流)。

02.第一章:File类_File类的构造方法:

1).File​(String pathname) 通过将给定的路径名字符串转换为抽象路径名来创建新的 File实例。  
2).File​(String parent, String child) 从父路径名字符串和子路径名字符串创建新的 File实例。 
3).File​(File parent, String child) 从父抽象路径名和子路径名字符串创建新的 File实例。  
示例代码:
public static void main(String[] args) {
//   1).File​(String pathname) 通过将给定的路径名字符串转换为抽象路径名来创建新的 File实例。
File f1 = new File("d:\\demo03.txt");//绝对路径:带盘符,从盘符开始找;
File f2 = new File("demo02.txt");//相对路径:不带盘符,从项目根目录下开始找;
File f3 = new File("ajfkdsljfkdsljfklsjf");//文件/目录不存在
File f4 = new File("d:\\aaa2");//构造在目录上
//   2).File​(String parent, String child) 从父路径名字符串和子路径名字符串创建新的 File实例。
File f5 = new File("d:\\", "demo03.txt");//相当于:f1

//  3).File​(File parent, String child) 从父抽象路径名和子路径名字符串创建新的 File实例。
File f6 = new File("d:\\");
File f7 = new File(f6, "demo03.txt");//相当于f1和f5


System.out.println("程序结束!");

}

03.第一章:File类_绝对路径和相对路径:

对于“磁盘目录”:
1).绝对路径:带盘符的。
2).相对路径:不带盘符的,从项目根目录开始。

04.第一章:File类File类的常用方法获取的方法:

1).public String getAbsolutePath() : 返回此File的绝对路径名字符串。
2).public String getPath() : 将此File转换为路径名字符串。
3).public String getName() : 返回由此File表示的文件或目 录的名称。
4).public long length() : 返回由此File表示的文件的长度。不能操作目录;
示例代码:
public static void main(String[] args) {
File f1 = new File("d:\\demo03.txt");
File f2 = new File("demo03");
System.out.println("获取它的绝对路径:" + f1.getAbsolutePath());
System.out.println("获取f2的绝对路径:" + f2.getAbsolutePath());//会换算为绝对路径

System.out.println("获取f1封装的路径:" + f1.getPath());//构造时的路径
System.out.println("获取f2封装的路径:" + f2.getPath());//构造时的路径

System.out.println("获取f1的文件名:" + f1.getName());//文件的名字
System.out.println("获取f2的目录名:" + f2.getName());//目录的名字

System.out.println("获取f1文件的长度:" + f1.length() + " 字节");//文件大小
System.out.println("获取f2目录的长度:" + f2.length() + " 字节");//0,不要对目录获取大小
}

05.第一章:File类File类的常用方法判断的方法:

1).public boolean exists() : 此File表示的文件或目 录是否实际存在。
2).public boolean isDirectory() : 此File表示的是否为目 录。
3).public boolean isFile() : 此File表示的是否为文件
示例代码:
public static void main(String[] args) {

//
// 1).public boolean exists() : 此File表示的文件或目 录是否实际存在。
File f1 = new File(“jfkdsljfdksl”);
File f2 = new File(“d:\demo03.txt”);
File f3 = new File(“d:\xxx.txt”);

    System.out.println("f1是否存在:" + f1.exists());//false
    System.out.println("f2是否存在:" + f2.exists());//true

//        2).public boolean isDirectory() : 此File表示的是否为目 录。
     System.out.println("f1是否是目录:" + f1.isDirectory());//false
    System.out.println("f2是否是目录:" + f2.isDirectory());//false
    System.out.println("f3是否是目录:" + f3.isDirectory());//true

//        3).public boolean isFile() : 此File表示的是否为文件

     System.out.println("f1是否是文件:" + f1.isFile());//false
    System.out.println("f2是否是文件:" + f2.isFile());//true
    System.out.println("f3是否是文件:" + f3.isFile());//false
}

06.第一章:File类File类的常用方法创建和删除的方法:

1).public boolean createNewFile():当且仅当具有该名称的文件尚不存在时, 创建一个新的
                         空文件。
2).public boolean mkdir() : 创建由此File表示的目 录。
3).public boolean mkdirs() : 创建由此File表示的目 录, 包括任何必需但不存在的父目 
                    录。
4).public boolean delete() : 删除由此File表示的文件或"空目录"。
示例代码:
public static void main(String[] args) throws IOException {
//       1).public boolean createNewFile():当且仅当具有该名称的文件尚不存在时, 创建一个新的
//       空文件。
    File f1 = new File("demo5.txt");
    if(!f1.exists()){
        //创建文件
        System.out.println(f1.createNewFile());
    }

    File f2 = new File("demo0555");
    System.out.println(f2.createNewFile());//按照文件创建

//        2).public boolean mkdir() : 创建由此File表示的目 录。
    File f3 = new File("demo56666");
    System.out.println(f3.mkdir());

//        3).public boolean mkdirs() : 创建由此File表示的目 录, 包括任何必需但不存在的父目
//        录。
    File f4 = new File("aaa\\bbb\\ccc");
    System.out.println(f4.mkdirs());

//        4).public boolean delete() : 删除由此File表示的文件或“空目录”。
    File f5 = new File("aaa.ffff");
    System.out.println("删除文件:" + f5.delete());//不走回收站--彻底删除

    File f6 = new File("demo03");
    System.out.println("删除非空目录:" + f6.delete());//false

    File f7 = new File("demo56666");
    System.out.println("删除空目录:" + f7.delete());//true

}

07.第一章:File类File类的常用方法目录的遍历:

    1).public String[] list() : 返回一个String数组, 表示该File目 录中的所有子文件或目 录。
2).public File[ ] listFiles() : 返回一个File数组, 表示该File目 录中的所有的子文件或目录。
注:上述两个方法在以下三种情况下会返回:null:
    1).调用list()/listFiles()的File对象是一个“文件”;
    2).调用list()/listFiles()的File对象指向的目录并不存在;
    3).调用list()/listFiles()的File对象确实指向了一个目录,但目录是一个“系统目录”;
    示例代码:
public static void main(String[] args) {
File dir = new File("d:\\aaa2xxxfdsfd");

if (dir.isDirectory()) {
    String[] fileNameArray = dir.list();
    for (String s : fileNameArray) {
        System.out.println(s);
    }
  }
}

08.第一章:File类练习遍历单级目录:

1).练习:查询d:\\aaa2根目录下所有的.txt文件
public static void main(String[] args) {
//练习:查询d:\\aaa2根目录下所有的.txt文件

//1.封装起始目录
File dir = new File("d:\\aaa2");
//2.获取目录下所有的子文件/子目录的数组
File[] fileArray = dir.listFiles();
//3.遍历
for (File f : fileArray) {
    if (f.isFile() && f.getName().endsWith(".txt")) {
        System.out.println(f);
    }
 }

}

09.第二章:递归_前奏-方法调用解析:

public class Demo {
public static void main(String[] args) {
    f1();
    System.out.println("a");
}

private static void f1() {
    f2();
    System.out.println("b");
}
private static void f2() {
    f3();
    System.out.println("c");
}
private static void f3() {
    System.out.println("呵呵...");
 }
}
    调用过程解析:

这里写图片描述

10.第二章:递归递归的概念示例_图示:

1).递归:指方法自己调用自己,这种形式叫:“方法的递归调用”简称:递归;
2).递归的注意事项:
    1).递归的层次不能太深,否则栈溢出;
    2).递归一定要有一个出口,否则就是“死递归”;

这里写图片描述

    3).构造方法不能递归调用:否则编译错误;
3).递归为什么会导致“栈溢出”:

这里写图片描述

11.第二章:递归练习递归求阶乘:

1).什么是“阶乘”:5的阶乘可以表示为:5! = 5 * 4 * 3 * 2 * 1
2).使用循环:
    int result = 1;
    for(int i = 1; i <= 5 ; i++){
        result *= i;
    }
    System.out.println(result);//120
3).从“未知”将问题分解到“已知”:
         5 * 24 = 120
  (未知)5!= 5 * 4!
              4 * 6
           4! = 4 * 3!
                     3 * 2
                3! = 3 * 2!
                          2 *   1
                       2! = 2 * 1!
                            1! = 1(已知)

这里写图片描述

12.第三章:综合案例:文件搜索第一版自过滤:

1).文件搜索:搜索D:\\aaa2目录下所有的.txt文件:
public class Demo {
public static void main(String[] args) {
    //查询d:\\aaa2目录下所有的.txt文件(包括子目录下)
    //1.封装起始目录
    File dir = new File("d:\\aaa2");
    //--------递归方法--------
    listFiles(dir);
    System.out.println("---------查找完毕!--------------");

}

private static void listFiles(File dir) {
    //2.获取目录下所有子文件/子目录的数组;
    File[] fileArray = dir.listFiles();
    //3.遍历数组,获取每个File对象;
    if (fileArray == null) {
        return;
    }
    for (File f : fileArray) {
        //4.判断是否是.avi文件
        if (f.isFile() && f.getName().endsWith(".txt")) {
            //      是:打印
            System.out.println(f);

        } else if (f.isDirectory()) {

            //      否:判断是否是目录:
            //          是:从步骤2到这里形成递归
            listFiles(f);
        }
    }

 }
}

13.第三章:综合案例:文件搜索_文件过滤器说明:

public class Demo {
public static void main(String[] args) {
    File dir = new File("d:\\aaa2");
  //使用匿名内部类的形式
   /* File[] fileArray = dir.listFiles(new FileFilter() {
        @Override
        public boolean accept(File pathname) {
            if (pathname.isFile() && pathname.getName().endsWith(".txt")) {
                return true;
            }
            return false;
        }
    });*/
   //使用Lambda改版:
    File[] fileArray = dir.listFiles((File pathname) -> {
            if (pathname.isFile() && pathname.getName().endsWith(".txt")) {
                return true;
            }
            return false;

            });

    System.out.println("集合中的内容:");
    System.out.println(Arrays.toString(fileArray));
 }
}

14.第三章:综合案例:文件搜索第二版过滤器:

public class Demo {
public static void main(String[] args) {
    //1.封装初始目录
    File dir = new File("d:\\aaa2");

    //2.递归方法
    listFiles(dir);
}

private static void listFiles(File dir) {
    //3.使用过滤器
    File[] fileArray = dir.listFiles(new FileFilter() {
        @Override
        public boolean accept(File pathname) {
            if ((pathname.isFile() && pathname.getName().endsWith(".txt"))
                                        || pathname.isDirectory()) {
                return true;
            }
            return false;
        }
    });
    //4.遍历数组
    if (fileArray == null) {
        return;
    }
    for (File f : fileArray) {
        if (f.isFile()) {
            System.out.println(f);
        }else{
            //递归
            listFiles(f);
        }
    }
  }
}

15.第三章:综合案例:文件搜索_第三版_Lambda表达式:

        public class Demo {
public static void main(String[] args) {
    //1.封装初始目录
    File dir = new File("d:\\aaa2");

    //2.递归方法
    listFiles(dir);
}

private static void listFiles(File dir) {
    //3.使用过滤器
    File[] fileArray = dir.listFiles((File pathname)-> {
            if ((pathname.isFile() && pathname.getName().endsWith(".txt"))
                                        || pathname.isDirectory()) {
                return true;
            }
            return false;

    });
    //4.遍历数组
    if (fileArray == null) {
        return;
    }
    for (File f : fileArray) {
        if (f.isFile()) {
            System.out.println(f);
        }else{
            //递归
            listFiles(f);
        }
    }
  }
}

总结:
01.能够说出File对象的创建方式
1).File(String path);
2).File(String parent,String child)
3).File(File parent,String child)

02.能够说出File类获取名称的方法名称
getName()
03.能够说出File类获取绝对路径的方法名称
getAbsolutePath()
04.能够说出File类获取文件大小的方法名称
length():单位:字节,只能对“文件”操作。
05.能够说出File类判断是否是文件的方法名称
isFile()
06.能够说出File类判断是否是文件夹的方法名称
isDirectory()
07.能够辨别相对路径和绝对路径
绝对路径:带盘符的
相对路径:不带盘符的,从项目根目录
08.能够遍历文件夹
File dir = new File(“d:\aaa2”);
File[] fileArrya = dir.listFiles();
if(fileArray != null){
for(File f : fileArray){
….
}
}
09.能够解释递归的含义
方法自己调用自己。
10.能够使用递归的方式计算5的阶乘
main(){
int num = 5;
System.out.println(num + ” 的阶乘为:” + jieCheng(num));
}
public static int jieCheng(int num){
if(num == 1){
return 1;
}
return num * jieCheng(num -1);
}
11.能够说出使用递归会内存溢出隐患的原因
递归调用时,方法会一直入栈,太多次数的递归就会导致栈溢出。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值