异常,file类(过滤器),递归

来源:互联网 发布:大张一刀流 知乎 编辑:程序博客网 时间:2024/05/22 06:21

Mac下快捷键

command+option+c 快速复制文件路径名

剪切文件方法:

command+c

command+option+v

在和服务器进行交互时,上传下载中会出现各种问题,这些问题在java中叫做异常,上传和下载的技术在IO包中,上传和下载操作的文件,在java中被封装成File类。

异常

Throwable是所有错误和异常的超类

错误:一般情况下不是因为我们的代码有问题,而是外部因素导致的。如用户内存不够等

编译时期异常:没有满足java语法或者调用的方法中声明了可能会发送异常,这个异常通常是需要处理的。

运行时期异常:java代码运行之后产生的异常,一般情况下是因为数据的原因导致的,可以处理,也可以不处理。一般情况下是更换数据。RunTimeException及其子类



运行异常是运行后的Exception in 。。红字

编译异常是直接红色波浪线。抛出异常


JVM如何处理异常?throws

1️⃣终止程序运行

2️⃣将错误信息,错误位置,错误异常的名字打印在输出控制台


处理异常一共三种方式

try..catch...finally

throws

throw

try{

可能发生的异常

}catch(异常的类名  变量名){

对异常的处理方式

}

常用的异常处理方式:e.printStackTrace();  将结果打印在控制台上。和JVM处理异常区别是不会终止程序运行


合并多个异常,如果try里面发送多个异常,最终只会有一个异常发送(代码ExceptionDemo2)

如果catch中捕获的异常存在子父类关系,那么最大的那个异常捕获必须放在最后面的位置。通常就是Exception

JDK1.7的新特性可以用  | 将多个异常连接起来,用一个catch处理,也就是说多个异常共享同一种处理方式,这种处理方式不能存在子父类关系


Throwable的成员方法

public String getMessage() 返回此throwable的详细消息字符串(本身没有输出功能)

toString() 返回此throwable的简短描述(本身没有输出功能)

PrintStackTrace() 将此throwable及其追踪输出至标准错误流(本身具有输出功能)

public void printStackTrace(PrintWriter s) 将此throwable及其追踪输出至指定的printWriter

最后一个错误输出至文件,可以先新建一个printWriter pw,直接PrintStackTrace(pw)再pw.flush刷新


Finally:

try{

可能会发送异常的代码

}catch(异常的类名 对象名){

对异常处理的方式

}finally{

一般用于释放资源

}

!!放在finally里面的代码一定会执行(优先于return,不优先于JVM退出System.exit(0))

共三种搭配模式

try...catch

try...catch...finally

try...finally





throws:抛出某个异常的类名,表示一种可能。可以抛出编译时期异常,运行时期异常

跟在方法后面

抛出异常的类名,多个之间用,隔开

表示抛出的异常,表示抛出的只是一种可能

抛出的异常通常由调用者进行处理


throw:

在方法体内部使用

后面跟的是一个具体的异常对象,所以这个异常是肯定存在的

后面跟一个异常对象,而且每次只能抛出一个对象

public static void main(String[] args) {try{int i=1/0;}catch(Exception e){throw new ArithmeticException("除数为零");}}

Exception in thread "main" java.lang.ArithmeticException: 除数为零

at com.practice912.Demo.main(Demo.java:8)


通常借助try...catch。用于自定义异常

command+option+z抛出异常,multi-catch将异常包起来一起抛出

如果后续代码需要运行就用try...catch,不需要运行就用throws

如果方法体内部能将异常处理,就用try...catch进行处理,如果自己处理不了就用throws


自定义异常(缺代码)

子类重写父类方法的注意事项

1️⃣子类重写父类方法时,只能抛出父类的异常本身或者是父类异常的子类异常

2️⃣当父类中有多个异常时,子类只能抛出父类异常的子集(一部分)

3️⃣当父类中的方法没有抛出异常时,子类的重写方法也不能抛出任何异常,只能使用try...catch自行处理


File类:文件和目录路径名的抽象表示形式

构造方法:

File(String pathname)通过将给定路径名字符串转换为抽象路径名来创建一个新的File实例

File(String parent,String child)根据parent路径字符串和child路径名字创建一个新的File实例

File(File parent,String child)根据parent抽象路径名和child路径名字符串创建一个新的file类实例


String pathname="E:/aa/cc/修仙.txt";

String parent="E:/aa/";

String child="cc/修仙.txt";


成员方法:

创建功能

public Boolean createNewFile()在硬盘上创建文件对象所表示的路径文件。

public boolean mkdir()创建单级文件夹

public boolean mkdirs()创建多级文件夹

删除功能

public boolean delete()删除文件

重命名功能

public boolean renameTo(File dest)剪切并重命名文件


new一个file,输出create方法的boolean

多级文件夹没办法直接删除,需要将里面所有的子文件都删除才可以删除最外面的文件。


File file =new File("/Users/yoofale/Documents/QQ20170824-193136@2x.png");

file.renameTo(new File("/Users/yoofale/Documents/QQ20170824-114930@2x.png"));

removeTo是将文件重命名后剪切到目标位置,不单单是重命名


判断功能

public boolean isDirectory() 判断当前文件是否是一个文件夹

public boolean isFile() 判断当前文件是否是一个标准文件

public boolean exists() 判断当前文件是否存在

public boolean canRead() 判断当前文件是否可读

public boolean canWrite() 判断当前文件是否可写

public boolean isHidden() 判断当前文件是否隐藏


获取功能

public String getAbsolutePath() 返回绝对路径名字符串(开发中用这个,因为是全路径名)

public String getPath() 返回相对路径名字符串

public String getName(0 返回文件或者目录的名称

public long length() 返回此抽象路径名表示的文件的长度(字节)

public long lastModified() 返回此文件最后一次被修改的时间

高级获取功能(文件夹所需要的功能)

public String[] list() 返回的是子文件的路径的数组

public File[] listFiles() 返回的是子文件的对象数目



判断单级目录下是否有制定后缀名的文件,如果有,输出文件名称

第一种方法

public static void main(String[] args) {// TODO Auto-generated method stub//1.将目录封装成File对象File file = new File("/Users/yoofale/Documents/");//2.获取目录下所有的文件名数组String[] list = file.list();//3.遍历所有的文件名数组for (String name : list) {//4.判断文件是否以.jpg结尾if(name.endsWith(".png")){System.out.println(name);}}}
第二种方法(过滤器)  return 先判断是不是一个标准文件,再判断是不是以.png格式结尾
private static void test2() {// TODO Auto-generated method stubFile file = new File("/Users/yoofale/Documents/");String[] names = file.list(new FilenameFilter() {@Overridepublic boolean accept(File dir, String name) {// TODO Auto-generated method stubreturn new File(dir,name).isFile()&&name.endsWith(".png");}});for (String name : names) {System.out.println(name);}}


递归:在方法体内部调用方法自身的现象

递归注意事项:

递归需要有出口,不然就是死递归

递归次数不能太多(在栈中会内存溢出)

构造方法不能递归,只有成员方法可以递归

求阶乘

private static int getJieCheng(int i) {// TODO Auto-generated method stubif(i==1){return 1;}else{return i*getJieCheng(i-1);}}
斐波那契兔子问题
private static int getCount(int i) {// TODO Auto-generated method stubif(i==1||i==2){return 1;}else{return getCount(i-1)+getCount(i-2);}}









原创粉丝点击