Java学习经验与总结(09)——异常与File类相关

一 异常

1 异常的概述

异常就是Java程序在运行过程中出现的错误。
异常的基类: Throwable
Exception分类:编译时异常(非RuntimeException)、运行 时异常(RuntimeException)

2 异常处理的两种方式

(1) try…catch…finally

try…catch处理异常的基本格式
try {
可能出现问题的代码 ;
}catch(异常名 变量名){
针对问题的处理 ;
}finally{
释放资源;
}

try…catch的方式处理多个异常
: try {
可能出现问题的代码 ;
}catch(异常名1 变量名1){
对异常的处理方式 ;
}catch (异常名2 变量名2){
对异常的处理方式 ;
}
注意事项:
1,能明确异常,就明确;
2.多个异常类,平级关系,在前在后没关系
3.多个异常类,存在继承关系,父类放在最后

(2)throws

throw的概述以及和throws的区别:
throw的概述:
在功能方法内部出现某种情况,程序不能继续运行,需要进行跳转时,就用throw把异常对象抛出。
throws和throw的区别
throws
用在方法声明后面,跟的是异常类名
可以跟多个异常类名,用逗号隔开
表示抛出异常,由该方法的调用者来处理
throws表示出现异常的一种可能性,并不一定会发生这些异常
throw
用在方法体内,跟的是异常对象名
只能抛出一个异常对象名
这个异常对象可以是编译期异常对象,可以是运行期异常对象
表示抛出异常,由方法体内的语句处理
throw则是抛出了异常,执行throw则一定抛出了某种异常

3 编译期异常和运行期异常的区别

(1)运行期异常

运行期异常:可以解决,也可不解决 (jvm处理)

解决方法:

  1. jvm处理(打印异常,并退出)

​ 2.try{}catch(Exoection e){}包围;catch当try中出现异常,就会捕获相应异常;try中发放入有可能出现错误的代码;

(2)编译期异常

编译期异常: 必须解决

处理方法:

1, 将异常抛给调用者,谁用谁处理,俗称甩锅盖(抛给虚拟机)采用 throws关键字在方法上进行抛出,抛给调用者,调用者处理

2.自己捕获处理

4 异常注意事项

主要用于编译期异常

1 子类重写父类方法时,子类的方法必须抛出相同的异常或>父类异常的子类,或者子类不抛出异常也是可以的。
2 如果父类抛出了多个异常,子类重写父类时,只能抛出相同的异常或者是他的子集,子类不能抛出父类没有的异常,或者子类不抛出异常也是可以的。
3 如果被重写的方法没有异常抛出,那么子类的方法绝对不可以抛出异常,如果子类方法内有异常发生,那么子类只能try,不能throws
4 两个类有继承关系,子类在重写父类方法时,父类方法没有抛出异常时,子类不能抛出异常;只能自己处理;
5 子类不能抛出父类没有抛过的异常
6 子类方法上抛出的异常不能比父类大
————————————————

二 finally关键字

1 finally关键字的特点和作用

特点 被finally控制的语句体一定会执行(前提 jvm没有停止)
特殊情况:在执行到finally之前jvm退出了(比如System.exit(0)
作用 用于释放资源,在IO流操作和数据库操作中会见

2 final,finally和finalize的区别

final:
是一个状态修饰符, 可以用来修饰类 , 变量 , 成员方法.
被修饰的类不能被子类继承, 修饰的变量其实是一个常量不能被再次赋值
修饰的方法不能被子类重写
finally:
用在try…catch…语句中 , 作用: 释放资源 . 特点: 始终被执行(JVM不能退出)
finalize:
Obejct类中的一个方法,用来回收垃圾

三 File类

1 file类的构造方法

File(String pathname):根据一个路径得到File对象
File(String parent, String child):根据一个目录和一个子文件/ 目录得到File对象
File(File parent, String child):根据一个父File对象和一个子文件/目录得到File对象

2 file类的相关方法

creatNewFile() //创建文件,第一次创建 成功返回true,重复创建返回false
mkdir() //创建单级目录,第一次创建成功 返回true,重复创建返回false
mkdirs()//创建多级目录,第一次创建成功 返回true,重复创建返回false
delete()//删除文件或空目录,不走回收 站
renameTo(File a)//新名字需要进行File封装; 当你源文件路径和传入文件路径不一致时,改名并剪切;路径一致时,改名;
isFile()//判断是不是文件
isDirectory()//判断是不是文件夹
exists()//判断文件,文件夹是否存在
getName()//获取文件名
length()//获取文件长度,字节数
getAbsolutePath()//获取绝对路径,返回值String类型
getAbsoluteFile()//获取绝对路径,返回值为File
getPath()//获取相对路径
getParent()//获取父路径 ,返回值String类型
getParentFile()//获取父路径 ,返回值为File
totalSpace()//获取盘符总空间
freeSpace()//获取盘符剩余空间
lastModified() //获取最后一次修改时间
public String[] list()//获取当前目录下所有文件或文件夹的名称
public String[] listFiles()//获取当前目录下所有文件或文件夹的File类型数组

四 一些案例演示

1 从银行取钱,发现钱不够,通过自定义异常给出提示。


public class myjavademo {

    public void main(String[] args) {
        int money = 2000;
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入取的金额:");
        int i = scanner.nextInt();
        if(i<=money){
            System.out.println("取钱成功");
            money-=i;
        }else{
            throw new  nomoneyException("没钱了");
        }
    }
    public class nomoneyException extends RuntimeException {
        public nomoneyException(String s) {
            super (s);
        }
    }

}

2 判断E盘指定目录下是否有后缀名.jpg的文件,如果有,就输出该文件名称

public class myjavademo {

    public static void main(String[] args) {
        File file = new File("E:\\图片");
        File[] files = file.listFiles();
        for (File file1 : files) {
            if(file1.getName().endsWith(".png"))
                System.out.println(file1.getName());
        }
    }

}

3 采用文件名称过滤器方式,判断D盘指定目录下是否有后缀名.jpg的文件,如果有,就输出该文件绝对路径。

public class myjavademo {

 
        public static void main (String[]args){
            File file = new File("E:\\图片");
            File[] files = file.listFiles(new FilenameFilter() {
              
                public boolean accept(File dir, String name) {
                    File file1 = new File(dir, name);
                    if (file1.isFile() && file1.getName().endsWith(".png")) {
                        return true;
                    } else {
                        return false;
                    }
                }
            });
            for (File file1 : files) {
                String s = file1.getAbsolutePath();
                System.out.println(s);
            }
        }
    }

4 修改指定目录下所有文件的名称

public class myjavademo {


    public class 判断图片 {
        public void main(String[] args) {
            File file = new File("E:\\1\\新建文件夹");
            File[] files = file.listFiles();
            for (File file1 : files) {
                if (file1.isFile() && file1.getName().endsWith(".mp4")) {
                    String name = file1.getName();
                    String s = "\\[www-itcast-cn\\]";//'[]'为特殊字符需要转义。前加‘\\’
                    String[] split = name.split(s);//分离[www-itcast-cn\\]
                    for (String s1 : split) {
                        File file2 = new File("E:\\1\\新建文件夹", s1);
                        file1.renameTo(file2);//同一路径下换名,不同路径剪贴换名
                    }
                }

            }
            File[] files1 = file.listFiles();
            for (File file1 : files1) {
                System.out.println(file1.getName());
            }
        }
    }

}

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