JAVA各章习题及答案 下载本文

System.in对象中没有readln()方法。

5.下列程序实现了在当前包dir815下新建一个目录subDir815,选择正确的一项填入程序的横线处,使程序符合要求( D )。

package dir815; import java.io.*;

public class X8_1_5 { public static void main(String[] args){ char ch; try{ File path = ; if(path.mkdir()) System.out.println(\ } catch(Exception e){ e.printStackTrace(); } } }

A.new File(\ B.new File(\ C.new File(\ D.new File(\【解析】在程序中,目录之间的连接符是“\\\\”或“/”,因此首先排除B和C;而默认情况下,创建相对目录是在当前目录下进行,而dir815也在当前目录下,因此要在dir815下创建新的目录,就必须使用D的形式。

6.下列流中哪一个使用了缓冲区技术( A )?

A.BufferedOutputStream B.FileInputStream C.DataOutputStream D.FileReader 【解析】只有BufferedOutputStream使用了缓冲区技术。

7.能读入字节数据进行Java基本数据类型判断过虑的类是( C )。

A.BufferedInputStream B.FileInputStream C.DataInputStream D.FileReader

【解析】DataInputStream类在读入字节数据时,进行Java基本数据类型判断过虑。 8.使用哪一个类可以实现在文件的任一个位置读写一个记录( B )?

A.BufferedInputStream B.RandomAccessFile C.FileWriter D.FileReader

【解析】只有RandomAccessFile才能实现在文件的任一个位置读写一个记录。 9.在通常情况下,下列哪个类的对象可以作为BufferedReader类构造方法的参数( C )?

A.PrintStream B.FileInputStream C.InputStreamReader D.FileReader

【解析】InputStreamReader类的对象可以作为BufferedReader类构造方法的参数。

10.若文件是RandomAccessFile的实例f,并且其基本文件长度大于0,则下面的语句实现的

功能是( B )。

f.seek(f.length()-1);

A.将文件指针指向文件的第一个字符后面 B.将文件指针指向文件的最后一个字符前面 C.将文件指针指向文件的最后一个字符后面 D.会导致seek()方法抛出一个IOException异常

【解析】通过调用f对象的length()方法,可以将文件指针指向文件的末尾,因此f.length()-1即指向文件的最后一个字符前面。

49

11.下列关于流类和File类的说法中错误的一项是( B )。

A.File类可以重命名文件 B.File类可以修改文件内容 C.流类可以修改文件内容 D.流类不可以新建目录 【解析】只有流类可以修改文件内容,而File类则不能。

12.若要删除一个文件,应该使用下列哪个类的实例( B )?

A.RandomAccessFile B.File C.FileOutputStream D.FileReader

【解析】要删除文件以及查看文件属性等,应使用File类对象来实现。 13.下列哪一个是Java系统的标准输入流对象( )?

A.System.out B.System.in C.System.exit D.System.err

【解析】System.in是Java系统的标准输入流对象,而System.out和System.err则是Java系统的标准输出流和标准错误对象,System.exit则是System类的退出方法。 14.Java系统标准输出对象System.out使用的输出流是( A )。

A.PrintStream B.PrintWriter C.DataOutputStream D.FileReader 【解析】System.out属性是PrintStream类型的对象。 二、填空题

1.Java的输入输出流包括 字节流 、 字符流 、 文件流 、 对象流 以及多线程之间通信的 管道流 。

2.凡是从外部设备流向中央处理器的数据流,称之为 输入 流;反之,称之为 输出 流。 3.java.io包中的接口中,处理字节流的有 DataInput 接口和 DataOutput 接口。

4.所有的字节输入流都从 InputStream 类继承,所有的字节输出流都从 OutputSteam 类继承。

5.与用于读写字节流的InputStream类和OutputStream类相对应,Java还提供了用于读写

Unicode字符的字符流 Reader 类和 Writer 类。

6.对一般的计算机系统,标准输入通常是 键盘 ,标准输出通常是 显示器 。

7.Java系统事先定义好两个流对象,分别与系统的标准输入和标准输出相联系,它们是 System.in 和 System.out 。

8.System类的所有属性和方法都是 Static类型 的,即调用时需要以类名System为前缀。 9.Java的标准输入System.in是 InputStream 类的对象,当程序中需要从键盘读入数据的时

候,只需调用System.in的 read 方法即可。

10.执行System.in.read()方法将从键盘缓冲区读入一个 字节 的数据,然而返回的却是16比

特的 整形量 ,需要注意的是只有这个 整形量 的低位字节是真正输入的数据,其高位字节 全部为0 。

11.System.in只能从键盘读取 二进制 的数据,而不能把这些比特信息转换为整数、字

符、浮点数或字符串等复杂数据类型的量。

12.Java的标准输出System.out是 PrintStream 类的对象。 PrintStream 类是过滤输出流类FilterOutputStream的一个子类,其中定义了向屏幕输送不同类型数据的方法 print() 和 println() 。

13.在Java中,标准错误设备用 System.err 表示。它属于PrintStream 类对象。

14.在计算机系统中,需要长期保留的数据是以 文件 的形式存放在磁盘、磁带等外存储设

备中的。

15. 目录 是管理文件的特殊机制,同类文件保存在同一 目录 下可以简化文件的管理,

提高工作效率。

50

16.Java语言的java.io包中的 File 类是专门用来管理磁盘文件和目录的。调用 File 类的

方法则可以完成对文件或目录的常用管理操作,如创建文件或目录、删除文件或目录、查看文件的有关信息等。

17.File类也虽然在java.io包中,但它不是InputStream或者OutputStream的子类,因为它不负

责 数据的输入输出 ,而专门用来管理 文件和目录 。

18.如果希望从磁盘文件读取数据,或者将数据写入文件,还需要使用文件输入输出流类

FileInputStream 和 FileOutputStream 。 19.Java系统提供的FileInputStream类是用于读取文件中的 字节 数据的 字节 文件输入流

类;FileOutputStream类是用于向文件写入 字节 数据的 字节 文件输出流。

20.利用 DataInputStream 类和 DataOutputStream 类提供的成员方法可以方便地从文件中读写不同类型的数据。

21.Java中的 RandomAccessFile 类提供了随机访问文件的功能,它继承了 Object 类,用

DataInput 和 DataOutput 接口来实现。 三、编程题

1.利用DataInputStream类和BufferedInputStream类编写一个程序,实现从键盘读入一个字符串,在显示器上显示前两个字符的Unicode码以及后面的所有字符。

【编程分析】本程序主要考察流类DataInputStream 和BufferedInputStream的使用方法。

第一步:创建字节输入流对象。

DataInputStream dis = new DataInputStream(System.in); BufferedInputStream bis = new BufferedInputStream(dis);

第二步:利用字节输入流对象分三次读取数据,第一次读取一个字节,第二次读取一个字节,第三次将剩余字节全部读入字节数组b中,并将该数组转换为字符串显示出来。

注意:字节数组中元素的个数比实际输入元素的个数多两个,原因是数组最后都要添加回车和换行两个转义字符的Unicode码。 【参考程序】

import java.io.*;

public class X8_3_1 {

public static void main(String[] args)throws IOException{ DataInputStream dis = new DataInputStream(System.in); BufferedInputStream bis = new BufferedInputStream(dis); int code,count; byte[] b = new byte[256]; code=bis.read(); System.out.println(\第一个字符的Unicode码为:\ code=bis.read(); System.out.println(\第二个字符的Unicode码为:\ count = bis.read(b); System.out.println(\数组b中元素的值为: \ for(int i=0; i

51

}

}

【运行结果】

abcdefgh 第一个字符的Unicode码为:97 第二个字符的Unicode码为:98 数组b中元素的值为:

99 100 101 102 103 104 13 10 数组b中字符的个数为:8 剩余字符为:cdefgh

2.编写一个程序,其功能是将两个文件的内容合并到一个文件中。

【编程分析】本题主要考察对文件流类FileReader和FileWriter的使用方法,实现从文件中读取数据,以及向文件中输入数据。

第一步:采用面向字符的文件流读出文件内容,使用FileReader类的read()方法,写文件内容使用FileWriter类的write()方法。

第二步:通过键盘方式输入要合并的两个源文件的文件名以及合并后的新文件名。 第三步:将两个源文件内容分别读出并写入到目标文件中。 【参考程序】

import java.io.*;

public class X8_3_2 { public static void main(String args[]) { InputStreamReader isr = new InputStreamReader(System.in); BufferedReader br = new BufferedReader(isr); File fin1, fin2, fout; try{ System.out.print(\ fin1 = new File(br.readLine()); if(!fin1.exists()){ System.out.println(\ System.exit(0); } System.out.print(\ fin2 = new File(br.readLine()); if(!fin2.exists()){ System.out.println(\ System.exit(0); } System.out.print(\ fout = new File(br.readLine()); if((new JoinFiles(fin1,fin2,fout)) != null){ // 合并文件 System.out.println(\ } else{ System.out.println(\

52