异常与File类相关-Java基础学习总结

7月19,20日异常,File基础内容学习,以及案例演示

异常

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

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

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


运行期异常:可以解决,也可不解决 (jvm处理)
解决方法:
1. jvm处理(打印异常,并退出)
​ 2.try{}catch(Exoection e){}包围;catch当try中出现异常,就会捕获相应异常;try中发放入有可能出现错误的代码;


编译期异常: 必须解决
处理方法:
1, 将异常抛给调用者,谁用谁处理,俗称甩锅盖(抛给虚拟机)采用 throws关键字在方法上进行抛出,抛给调用者,调用者处理
2.自己捕获处理


throw的概述以及和throws的区别

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

finally关键字的特点及作用

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

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

自定义异常
概述 需要将我们自定义的异常类纳入到我们的异常体系中

//注意 自定义异常类 提供有参数构造 
		throw new  异常名(" 解决的方法") ;
自定义的异常类需要继承父类,成为真正的异常类
super(Message),将信息传至父类
异常注意事项(针对编译期异常)
	a:子类重写父类方法时,子类的方法必须抛出相同的异常或>父类异常的子类,或者子类不抛出异常也是可以的。
	b:如果父类抛出了多个异常,子类重写父类时,只能抛出相同的异常或者是他的子集,子类不能抛出父类没有的异常,或者子类不抛出异常也是可以的。
	c:如果被重写的方法没有异常抛出,那么子类的方法绝对不可以抛出异常,如果子类方法内有异常发生,那么子类只能try,不能throws
    d:两个类有继承关系,子类在重写父类方法时,父类方法没有抛出异常时,子类不能抛出异常;只能自己处理;
    e:子类不能抛出父类没有抛过的异常;
    f: 子类方法上抛出的异常不能比父类大;

Throwable类相关方法

public String getMessage() //获取异常信息
public String toString() 返回此throwable 的简短描述
public void printStackTrace()打印异常的堆栈信息
printStackTrace(PrintStream s) 将此 throwable 及其追踪输出到指定的输出流。
File类

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

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类型数组  
文件名称过滤器

作用:筛选出符合条件的文件

public String[] list(FilenameFilter filter)
public File[] listFiles(FilenameFilter filter)

案例演示

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

public static 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);
    }
}

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

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

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

public static void main(String[] args) {
    File file = new File("E:\\图片");
    File[] files = file.listFiles(new FilenameFilter() {
        @Override
        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);
   }
}

需求: 修改指定目录下所有文件的名称

如: 
E:\resource\各种专治\[www-itcast-cn]专治各种疼痛01.mp4
E:\resource\各种专治\[www-itcast-cn]专治各种疼痛02.mp4
E:\resource\各种专治\[www-itcast-cn]专治各种疼痛03.mp4
....
修改成
E:\resource\各种专治\专治各种疼痛01.mp4
E:\resource\各种专治\专治各种疼痛02.mp4
E:\resource\各种专治\专治各种疼痛03.mp4
...
public class 判断图片 {
    public static 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());
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值