IO流(一)
1:异常(理解)
(1)程序出现的不正常的情况
(2)异常的体系:
Throwable
|--Error 严重问题,我们不处理。这种问题一般都是很严重的,比如说内存溢出。
|--Exception 问题:
|--RuntimeException 运行期异常,我们需要修正代码
|--非RuntimeException 编译期异常,必须处理的,否则程序编译不通过
(3)异常的处理:
A:JVM的默认处理
把异常的名称,原因,位置等信息输出在控制台,但是程序不能继续执行。
B:自己可以处理
a:try...catch...finally
自己编写处理代码,后面的程序可以继续执行。
b:throws
把自己处理不了的,在方法上声明,告诉调用者,这里有问题。
try...catch...finally的处理格式:
try { 可能出现问题的代码; }catch(异常名 变量) { 针对问题的处理; }finally { 释放资源; } 变形格式: try { 可能出现问题的代码; }catch(异常名 变量) { 针对问题的处理; }
注意:
A:try里面的代码越少越好;
B:catch里面必须有内容,哪怕是给出一个简单的提示。
JDK7出现了一个新的异常处理方案:
try{ }catch(异常名1 | 异常名2 | ... 变量 ) { ... }
注意:这个方法虽然简洁,但是也不够好。
A:处理方式是一致的。(实际开发中,好多时候可能就是针对同类型的问题,给出同一个处理)
B:多个异常间必须是平级关系。
(4)面试题
A:编译期异常和运行期异常的区别?
编译期异常:Java程序必须显示处理,否则程序就会发生错误,无法通过编译。
运行期异常:无需显示处理,也可以和编译时异常一样处理。
B:throw和throws是的区别
throw:
- 用在方法体内,跟的是异常对象名;
- 只能抛出一个异常对象名;
- 表示抛出异常,由方法体内的语句处理;
- throw则是抛出了异常,执行throw则一定抛出了某种异常。
throws:
格式:
throws 异常类名
- 用在方法声明后面,跟的是异常类名;
- 可以跟多个异常类名,用逗号隔开;
- 表示抛出异常,由该方法的调用者来处理;
- throws表示出现异常的一种可能性,并不一定会发生这些异常。
(5)finally关键字及其面试题
A:finally用于释放资源,它的代码永远会执行。
B:面试题
a:final,finally,finalize的区别?
final:最终的意思,可以修饰类,成员变量,成员方法。
修饰类,类不能被继承;
修饰变量,变量是常量;
修饰方法,方法不能被重写。
finally:是异常处理的一部分,用于释放资源。
一般来说,代码肯定会执行,特殊情况:在执行到finally之前jvm退出了
finalize:是Object类的一个方法,用于垃圾回收。
b:如果在catch里面有return,请问finally还执行吗?如果执行,在return前还是后
会,前。
C:异常处理的变形
- try...catch...finally
- try...catch...
- try...catch...catch...
- try...catch...catch...fianlly
- try...finally
(6)自定义异常
继承自Exception或者RuntimeException,只需要提供无参构造和一个带参构造即可。
(7)异常的注意实现
1:子类重写父类方法时,子类的方法必须抛出相同的异常或父类异常的子类。(父亲坏了,儿子不能比父亲更坏)。
2:如果父类抛出了多个异常,子类重写父类时,只能抛出相同的异常或者是他的子集,子类不能抛出父类没有的异常。
3:如果被重写的方法没有异常抛出,那么子类的方法绝对不可以抛出异常,如果子类方法内有异常发生,那么子类只能try,不能throws。
2:File(掌握)
(1)IO流操作中大部分都是对文件的操作,所以Java就提供了File类供我们来操作文件。
(2)构造方法
1.File file = new File("e:\\demo\\a.txt"); 2.File file = new File("e:\\demo","a.txt"); 3.File file = new File("e:\\demo"); File file2 = new File(file,"a.txt");
(3)File类的功能
A:创建功能
- public boolean createNewFile():创建文件 如果存在这样的文件,就不创建了
- public boolean mkdir():创建文件夹 如果存在这样的文件夹,就不创建了
- public boolean mkdirs():创建文件夹,如果父文件夹不存在,会帮你创建出来
B:删除功能
- public boolean delete()
- 1:如果你创建文件或者文件夹忘了写盘符路径,那么,默认在项目路径下。
- 2:Java中的删除不走回收站。
- 3:要删除一个文件夹,请注意该文件夹内不能包含文件或者文件夹
C:重命名功能
- public boolean renameTo(File dest)
- 如果路径名相同,就是改名。
- 如果路径名不同,就是改名并剪切。
- 路径以盘符开始:绝对路径 c:\\a.txt
- 路径不以盘符开始:相对路径 a.txt
D:判断功能
- public boolean isDirectory():判断是否是目录
- public boolean isFile():判断是否是文件
- public boolean exists():判断是否存在
- public boolean canRead():判断是否可读
- public boolean canWrite():判断是否可写
- public boolean isHidden():判断是否隐藏
E:获取功能
- public String getAbsolutePath():获取绝对路径
- public String getPath():获取相对路径
- public String getName():获取名称
- public long length():获取长度。字节数
- public long lastModified():获取最后一次的修改时间,毫秒值
F:高级获取功能
- public String[] list():获取指定目录下的所有文件或者文件夹的名称数组
- public File[] listFiles():获取指定目录下的所有文件或者文件夹的File数组
G:过滤器功能
- public String[] list(FilenameFilter filter)
- public File[] listFiles(FilenameFilter filter)
(4)案例:
A:输出指定目录下指定后缀名的文件名称
a:先获取所有的,在遍历的时候判断,再输出
b:先判断,再获取,最后直接遍历输出即可
B:批量修改文件名称