java.io.PrintWriter
- 缓冲字符输出流,特点:可以按行写出字符串,并且带有自动行刷新功能
通常创建PrintWriter时,其内部会自行创建一个高级流BufferedWriter作为缓冲功能 - java.io.BufferedWriter,缓冲字符输出流
- 针对文件写出操作的构造方法:PrintWriter(File file);PrintWriter(String path)
- void println();void print();写出方法
- PrintWriter可以直接处理字节流,也可以处理字符流,但是直接处理字节流时不能指定字符集,中间添加一层OSW就可以指定字符集了
- 当创建PrintWriter时处理的是流(字节字符均可),就可以创建具有自动行刷新功能
*当传进PW时第一个参数为流时,就支持第二个参数,该参数是一个boolean值,若为true则PW具有自动行刷新,直接操作文件不具有自动行刷新功能
*自动行刷新:每当使用println方法写出字符串时,会自动flush - 具有自动行刷新功能的PW在使用println()方法写出字符串时会自动进行flush,注意:print方法写出字符串不会进行flush
java.io.BufferedReader
- 缓冲字符输入流,可以按行读取字符串
- BufferedReader提供方法:String readLine();该方法会连续读取若干字节,直到读取到换行符为止,然后将换行符之前的所有字符组成一个字符串后返回,但是返回的字符串中不含有最后的换行符,当读取到文件末尾,返回值为null
异常处理
- 异常处理中的try-catch
- *当JVM运行过程中出现异常,都会实例化一个该异常实例并抛出,然后检查该异常是否可以被捕获,若没有被try包围,则会将该异常抛到方法之外
- *当try中代码出现异常时,catch可以捕获抛出的异常并得以解决, 前提是catch捕获的异常是try中抛出的异常类型
*try{要捕获异常的代码}catch(可能出现的错误){解决该错误的逻辑}…注:出了try语句进入catch就不会再进入try(catch可以写很多个,建议在最后捕获异常的父类) - try不能独立使用,后面需要配合catch或finally
*对于catch而言,可以有多个,来分别捕获try中出现的不同异常来进行处理 - 应当养成一个习惯,在最下面捕获Exception,这样做可以防止出现没有捕获的异常而导致程序中断,若捕获的异常存在父子继承关系,那么子类异常必须在上面先行捕获
- finally块,可以直接跟在try块之后,或者最后一个catch块之后
*finally块可以保证无论try语句中的代码是否出错,其finally块中代码一定被执行
*通常会将诸如释放资源等操作放入finally块 - 当方法中使用throw抛出一个异常时,应当在方法上使用throws声明该异常的抛出,以告知调用者来处理这个可能出现的异常,只有抛出RuntimeException及其子类异常时,可以不使用throws通知调用者
- 当调用一个含有throws声明的方法时,编译器要求我们必须处理该方法可能抛出的异常,处理手段有两个:
*使用try-catch自行捕获
*在当前方法上继续使用throws将该异常抛出 - 子类重写父类含有throws抛出异常声明的方法时对throws的重写要求:
*可以不抛出任何异常
*可以只抛出部分异常
*可以抛出父类抛出异常的子类异常
*不可以抛出额外异常
*不可以抛出父类抛出异常的父类异常 - Exception常用API
*void printStackTrace();用来输出错误信息,用来跟踪异常事件发生时执行堆栈的内容
*String getMessage();用来输出出现异常的相关信息 - 自定义异常,语法结构:class 自定义异常名 extends Exception{…},通常用来说明业务逻辑级别的异常