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