文本文件pw.txt的内容如下所示:
#cold_bold大家好! #cold_bold hello! #cold_bold bye!
操作完毕之后的文本文件pw.txt的内容如下所示:
#cold_bold大家好! #cold_boldhello! #cold_boldbye! #cold_bold大家好!hello!bye!
参考答案
实现此案例需要按照如下步骤进行。
步骤一:新建TestBrAndPw类,添加测试方法testBrAndPw方法
首先,新建名为TestBrAndPw的类,并在类中添加单元测试方法 testBrAndPw,代码如下所示:
import org.junit.Test; public class TestBrAndPw { /** * 使用BufferedReader和PrintWriter */ @Test public void testBrAndPw() throws Exception { } }
步骤二:读取文本文件的所有行
首先,创建BufferedReader类的对象,并调用该对象的 readLine 方法逐一读取文件中的每行文本连接为一个字符串,代码如下所示:
import java.io.BufferedReader; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.PrintWriter; import org.junit.Test; public class TestBrAndPw { /** * 使用BufferedReader和PrintWriter */ @Test public void testBrAndPw() throws Exception { #cold_bold FileInputStream fis = new FileInputStream("pw.txt"); #cold_bold InputStreamReader isr = new InputStreamReader(fis); #cold_bold BufferedReader br = new BufferedReader(isr); #cold_bold #cold_bold String line = ""; #cold_bold String all = ""; #cold_bold #cold_bold while ((line = br.readLine()) != null) { #cold_bold all += line; #cold_bold System.out.println(line); #cold_bold } } }
步骤三:使用PrintWriter对象写出数据
PrintWriter是带有行刷新的缓冲字符输出流,它提供了丰富的重载print与println方法。其中,println方法在于输出目标数据后自动输出一个系统支持的换行符。
为向文本文件中追加信息,首先创建OutputStream类的对象,构造该对象时要使该对象具备追加功能;然后,使用OutputStream类的对象构造 PrintWriter类的对象,最后调用 println 方法写入文本,并关闭BufferedReader 对象和PrintWriter对象。代码如下所示:
import java.io.BufferedReader; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.PrintWriter; import org.junit.Test; public class TestBrAndPw { /** * 使用BufferedReader和PrintWriter */ @Test public void testBrAndPw() throws Exception { FileInputStream fis = new FileInputStream("pw.txt"); InputStreamReader isr = new InputStreamReader(fis); BufferedReader br = new BufferedReader(isr); String line = ""; String all = ""; while ((line = br.readLine()) != null) { all += line; System.out.println(line); } #cold_bold OutputStream os=new FileOutputStream("pw.txt",true); #cold_bold PrintWriter pw = new PrintWriter(os,true); #cold_bold System.out.println(all); #cold_bold pw.println(); #cold_bold pw.println(all); #cold_bold br.close(); #cold_bold pw.close(); } }
运行上述代码,文本文件pw.txt文件末尾多了一行数据,这一行的内容为pw.txt文本文件中的每一行数据信息累加的和。
参考答案
Java异常结构中定义有Throwable类,Exception和Error是其派生的两个子类。其中Exception表示由于网络故障、文件损坏、设备错误、用户输入非法等情况导致的异常;而Error表示Java运行时环境出现的错误,例如:JVM内存资源耗尽等。
A.try … catch … catch,当多个catch时,后一个catch捕获类型一定是前一个的父类。
B.try…finally可以组合使用。
C.throw抛出的一些异常,程序不进行处理,程序编译也无错误。
D.throws一定是写在方法后面。
参考答案
本题正确答案为BCD。
本题中A选项说法错误,catch块可以捕获的异常类型是Throwable类及其子类类型,多个catch捕获的异常类型之间可以没有父子关系,但如果存在父子关系,则catch捕获的异常类型由上至下,顺序应是子类到父类,例如如下代码:
try{ … }catch(NullPointerException e){ … }catch(RuntimeException e){ … }catch(Exception e){ … }
子类型异常在前,父类型异常在后,这样的顺序依次捕获。否则编译不通过。
import java.io.FileNotFoundException; import java.io.FileOutputStream; public class Foo { public void writeData(){ try { FileOutputStream fos= new FileOutputStream("out.dat"); fos.write(1); fos.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } } }
参考答案
上述代码中,除了产生FileNotFoundException异常外,还会产生IOException异常,但在上述代码中没有对IOException做出处理,因此出现编译错误。可以在catch块中捕获该异常,也可以使用throws将异常抛出给方法的调用者。在此,使用了throws将异常抛出,改正后的代码如下所示:
import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; public class Foo { public void writeData() throws IOException{ try { FileOutputStream fos= new FileOutputStream("out.dat"); fos.write(1); fos.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } } }
参考答案
Java异常可以分为可检测异常,非检测异常:
1)可检测异常:可检测异常经编译器验证。对于声明抛出异常的任何方法,编译器将强制执行处理或声明规则,不捕捉这个异常,则产生编译错误。
2)非检测异常:非检测异常不遵循处理或者声明规则。在产生此类异常时,不一定非要采取任何适当操作,编译器不会检查是否已经解决了这样一个异常。
RuntimeException 类属于非检测异常,因为普通JVM操作引起的运行时异常随时可能发生,此类异常一般是由特定操作引发。但这些操作在java应用程序中会频繁出现。因此它们不受编译器检查与处理或声明规则的限制。非RuntimeException为可检测异常,该异常经编译器验证。
参考答案
1)IllegalArgumentException抛出的异常表明向方法传递了一个不合法或不正确的参数
2)NullPointerException当应用程序试图在需要对象的地方使用 null 时,抛出该异常
3)ArrayIndexOutOfBoundsException当使用的数组下标超出数组允许范围时,抛出该异常
4)ClassCastException当试图将对象强制转换为不是实例的子类时,抛出该异常
5)NumberFormatException当应用程序试图将字符串转换成一种数值类型,但该字符串不能转换为适当格式时,抛出该异常。
参考答案
printStackTrace方法可以输出错误信息,用来跟踪异常事件发生时执行堆栈的内容。