异常以及file类

01_异常的概述和分类

  • 异常:

    • 概述: 程序出现不正常的情况就是异常.
    • 分类: //理解

        • Error: 错误
          • 服务器宕机, 数据库崩溃
        • Exception: 异常, 这个才是我们常说的异常
          • 编译期异常: 非RuntimeException及其子类
          • 运行时异常: RuntimeException及其子类
  • 案例: 老王骑车去西藏
    • a.肚子疼 // 异常
    • b.车胎爆了 // 异常
    • c.前方有山洪,地震 // 错误
    • d.路上好多小石子,比较坎坷 // 异常
    • e.自行车丢了 // 错误

02_编译期异常和运行时异常的区别

  • 编译期异常:
    • 必须处理, 才能通过编译.
  • 运行时异常:
    • 不用处理, 也能通过编译.

03_异常的两种处理方式以及区别

  • 异常的处理方式

    • 方式一: try-catch-finally 语句

      • 格式:

        try {
        // 尝试要执行的代码
        } catch(异常类型 对象名) {
        // 遇到异常后的处理代码
        } finally {
        // 一般是用来释放资源的,正常情况下,里边的代码永远会执行.
        }

    • 方式二: throws 声明抛出异常

      * 异常的处理方式有几种,他们之间有什么区别?
           * try-catch-finally: 处理完后, 程序会接着执行.
           * throws: 处理完后, 程序会终止运行.
      

04_finally关键字

  • finally关键字:
    • finally是try-catch-finally语句体的一个模块, 一般是用来释放资源的, 正常情况下, 里边的代码永远会执行.

05_finally关键字的面试题

  • 题目一: 分析如下代码, 看方法的返回值是什么?

    public static int method1() {
    int num = 10;
    try {
    System.out.println(1/0);
    num = 20;
    System.out.println(“我是try中的输出语句”);
    } catch (Exception e) {
    num = 30;
    return num; //30

    } finally{
        num = 40;
        System.out.println("我是finally中的输出语句");
    }
    return 50;
    

    }

  • 题目二: 如果catch中有return, finally里边的代码会不会执行? 如果会, 只在return之前还是之后?

    • 会, 在return之前.
    • 注意:
      • 其实严格意义上来讲, 是在return之间, 因为return做了两件事:
      • 看见return后, 会先创建一个返回路径记录当前要返回的值;
      • 返回当前的值, 在返回之前, 会先执行finally中的代码.

06_File类简介及构造方法

  • 概述:

    • 用来操作文件或者文件夹的.
    • 大白话: 其实是用来操作路径的.
  • 构造方法:

    • 直接传入文件(夹)的路径
      • File file1 = new File(“D:\bbb\a.txt”);
      • System.out.println(file1.isFile());
    • 传入父目录(String) 和 子文件(夹)名
      • File file2 = new File(“D:\bbb”, “a.txt”);
      • System.out.println(file2.isFile());
    • 传入父目录(File) 和 子文件(夹)名
      • File file3 = new File(“D:\”);
      • File file4 = new File(file3,”a.jpg”);
      • System.out.println(file4.isFile());
  • 学File类的小技巧, 先搞定几个单词, 再学起来就事半功倍了:

    • file: 文件
    • directory: 文件夹
    • path: 路径
    • absolute: 绝对

07_绝对路径和相对路径

  • 绝对路径和相对路径的区别:

    • 绝对路径: 固定的写”死”的路径, 一般是以盘符开头.
    • 相对路径: 一般是相对于当前项目(的路径)来讲的.

08_File类的创建和删除功能

 * 创建功能:
     * createNewFile(); //创建文件, 不存在就创建并返回true, 存在就不创建返回false
     * mkdir();         //创建单级文件夹, 不存在就创建并返回true, 存在就不创建返回false
     * mkdirs();        //创建多级文件夹, 不存在就创建并返回true, 存在就不创建返回false
 * 删除功能:
     * delete();        //删除文件(夹)   注意:Java中的删除不走回收站,要删除的文件夹必须为空。

09_File类的获取功能

 * 获取功能
     * length();            //只能统计文件的大小,单位是字节。如果统计文件夹的大小,结果可能不是你想要的.
     * getName();           //获取文件(夹)名字
     * getAbsolutePath();   //获取绝对路径的字符串形式
     * getAbsoluteFile();   //获取绝对路径的 File对象形式
     * getPath();           //创建File对象的时候,用的是什么路径就返回什么路径.
                            //一般是用来获取相对路径的.
     * getParent();         //获取文件(夹)的父目录的 字符串形式
     * getParentFile();     //获取文件(夹)的父目录的 File对象形式

10_File类的判断功能

 * 判断功能
     * exists();            //判断文件(夹)是否存在
     * isFile();            //判断是否是文件
     * isDirectory();       //判断是否是文件夹

11_File类的list()&&listFiles()

 * String[] list();         //获取指定目录下所有的文件(夹)的名称数组
 * File[] listFiles();      //获取指定目录下所有的文件(夹)的对象数组

12_匿名内部类

 * 格式:

    new 类名或者接口名() {
        //重写所有的抽象方法
    };

 * 本质:
     * 大白话解释: 其实就是一个类或者接口 的子类对象.

13_文件名称过滤器(理解)

 * 获取D盘下, 所有后缀名为.jpg的文件.

     * 思路一: 先获取所有, 然后遍历获取指定文件.
         * a.通过listFiles()获取到D盘下所有的文件(夹)对象.
         * b.遍历, 获取到每一个File对象.
         * c.然后判断是否是后缀名为.jpg的文件, 
             * 如果是就打印,不是就什么都不操作.

     * 思路二: 在获取的时候, 直接获取符合要求的文件.
         * 通过文件名称过滤器实现.


 * 文件名称过滤器:
     * String[] list(FilenameFilter ff);        //文件名称过滤器
     * File[] listFiles(FilenameFilter ff);     //文件名称过滤器

14 递归:

        概述:方法自己调用自己
        // StackOverflowError: 栈内存溢出
        注意事项:
            1.递归调用方法的次数不能太多,否则会栈内存溢出
            2.递归一定要有出口,否则会栈内存溢出
            3.构造方法不能递归

15 遍历指定路径下的所有文件(包括子目录\子子目录下的文件)

public static void findFileAndDirectory(String path) {
    // 1.把传入的路径封装成一个File对象
    File file= new File(path);
    // 2.获取该路径下的所有的子文件\子文件夹
    File[] files = file.listFiles();
    // 3.遍历获取到的所有子文件\子文件夹;
    if(files != null) {
        for(File file2 : files) {
            if(file2.isFile()) {
                System.out.println(file2);
            }

            if(file2.isDirectory()) {
                // 递归
                findFileAndDirectory(file2.getAbsolutePath());
            }
        }
    }
}

16 遍历指定路径下的所有.jpg文件(包括子目录\子子目录下的文件)

public static void findJpgFile(String path) {
    // 1.把出入的路径封装成一个File对象
    File file = new File(path);
    // 2.获取该路径下的所有的子文件\子文件夹
    File[] listFiles = file.listFiles();
    // 3.遍历获取到的所有子文件\子文件夹;
    if(listFiles != null) {
        for(File file2 : listFiles) {
            // 如果是文件
            if(file2.isFile() &&file2.getName().endsWith(".jpg")) {
                System.out.println(file2);
            }

            if(file2.isDirectory()) {
                findJpgFile(file2.getAbsolutePath());
            }
        }
    }
}

17 计算文件夹的大小

    public static long getDirectorySize(String path) {
    // 1.把传入的路径封装成一个File对象
    File file = new File(path);
    // 2.获取该路径下的所有子文件\子文件夹
    File[] files = file.listFiles();
    long countSize = 0;
    // 3.遍历获取到的所有子文件\子文件夹
    if(files != null) {
        for(File file2 : files) {
            if(file2.isFile()) {
                // 每遍历到一个文件,就计算该文件的大小,然后累加
                long len = file2.length();
                countSize += len;
            }

            if(file2.isDirectory()) {
                // 递归  
                countSize += getDirectorySize(file2.getAbsolutePath());
            }
        }
    }
    return countSize;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值