Java7课后习题.docx
《Java7课后习题.docx》由会员分享,可在线阅读,更多相关《Java7课后习题.docx(13页珍藏版)》请在冰豆网上搜索。
![Java7课后习题.docx](https://file1.bdocx.com/fileroot1/2023-1/21/fa64659c-2d51-415e-870f-fd5ccf917fcd/fa64659c-2d51-415e-870f-fd5ccf917fcd1.gif)
Java7课后习题
Java07课后习题
1、选择题:
1.下面关于访问文件和目录说法错误的一项是(C)。
A、File类虽然它不能访问文件内容,却可以用来进行文件的相关操作,它描述的是文件本身的属性。
B、File类如果需要访问文件本身,则需要使用输入/输出流。
C、File类可以使用文件路径字符串来创建File实例,该文件路径字符串可以是绝对路径,但不可以是相对路径,默认情况下,程序会根据用户的工作路径来解释相对路径,通常就是Java虚拟机所在的路径。
(也可以是相对路径)
D、将路径当作File类来处理,路径名中除了最后一个之外每个字段都表示一个目录;最后一个字段可能表示一个目录或文件名。
2.下面关于流的描述有误的一项是(A)。
A、流是指一连串流动的字符,是以先进后出的方式发送信息的通道。
B、在Java中,处理字节流的两个基础的类是InputStream和OutputStream。
C、在Java中,用于处理字符流的两个基础的类是Reader和Writer。
D、按照流的方向分,可以分为输入流(InputStream)和输出流(OutputStream)。
3.下面关于流的分类说法错误的一项是(B)。
A、为了处理Unicode字符串,定义了一系列的单独类,这些类是从抽象类Reader和Writer继承而来的。
B、这些单独类的操作均以单字节(16-bits)的Unicode字符为基础,而非双字节的字符为基础。
C、处理流是“处理流的流”,它用来处理其它的流,处理流又被称为高级流(HighLevelStream)。
D、节点流又常常被称为低级流(LowLevelStream)。
4.下面关于低级InputStream类(节点流)的说法有误的一项是(D)。
A、低级InputStream类(节点流)的ByteArrayInputStream方法为读取字节数组设计的流,允许内存的一个缓冲区被当作InputStream使用。
B、低级InputStream类(节点流)的PipedInputStream方法即管道流,产生一份数据,能被写入相应的PipedOutputStream。
C、低级InputStream类(节点流)的FilterInputStream方法,它派生自InutStream,其功能在于将一个流连接到另一个流的末端,它将两种流连接起来。
D、低级InputStream类(节点流)的DataInputStream方法,它是FilterInputStream抽象类的子类,并且提供了用于从另一个流中读取简单数据类型数据和String类型数据的读取方法。
5.下列数据流中,属于输入流的一项是(C)。
A、从网络流向显示器的数据流B、从内存流向硬盘的数据流
C、从键盘流向内存的数据流D、从键盘流向显示器的数据流
6.下列流中哪一个使用了缓冲区技术(B)。
A、FileInputStreamB、BufferedOutputStream
C、FileReaderD、DataOutputStream
7.能读入字节数据进行Java基本数据类型判断过虑的类是(A)。
A、DataInputStreamB、BufferedInputStream
C、FileReaderD、FileInputStream
8.使用哪一个类可以实现在文件的任意一个位置读写一个记录(C)。
A、BufferedInputStreamB、FileReader
C、RandomAccessFileD、FileWriter
9.在通常情况下,下列哪个类的对象可以作为BufferedReader类构造方法的参数(D)。
A、FileInputStreamB、FileReader
C、PrintStreamD、InputStreamReader
10.下列关于流类和File类的说法中错误的一项是(A)。
A、File类可以修改文件内容B、File类可以重命名文件
C、流类不可以新建目录D、流类可以修改文件内容
11.若要删除一个文件,应该使用下列哪个类的实例(A)。
A、FileB、RandomAccessFile
C、FileReaderD、FileOutputStream
2、填空题:
1.Java的输入输出流包括__字节流_____、__字符流____、__文件流____、对象流_______以及多线程之间通信的管道流________。
2.凡是从外部设备流向中央处理器的数据流,称之为__输入______流;反之,称之为_输出_______流。
3.所有的字节输入流都从__InputStream______类继承,所有的字节输出流都从_OutputStream_______类继承。
4.java.io包中的接口中,处理字节流的有__DataInput______接口和__DataOutput______接口。
5.与用于读写字节流的InputStream类和OutputStream类相对应,Java还提供了用于读写Unicode字符的字符流___Reader_____类和___Writer_____类。
6.对一般的计算机系统,标准输入通常是_键盘_______,标准输出通常是_显示器_______。
7.System类的所有属性和方法都是__Static______类型的,即调用时需要以类名System为前缀。
8.System.in只能从键盘读取___二进制_____的数据,而不能把这些比特信息转换为整数、字符、浮点数或字符串等复杂数据类型的量。
9.在计算机系统中,需要长期保留的数据是以___文件_____的形式存放在磁盘、磁带等外存储设备中的。
10.___目录_____是管理文件的特殊机制,同类文件保存在同一__目录______下可以简化文件的管理,提高工作效率。
11.Java语言的java.io包中的__File______类是专门用来管理磁盘文件和目录的。
调用__File______类的方法则可以完成对文件或目录的常用管理操作,如创建文件或目录、删除文件或目录、查看文件的有关信息等。
12.File类也虽然在java.io包中,但它不是InputStream或者OutputStream的子类,因为它不负责_数据的输入和输出_______,而专门用来管理___文件还有目录_____。
13.如果希望从磁盘文件读取数据,或者将数据写入文件,还需要使用文件输入输出流类___FileInputStream_____和_FileOutputStream_______。
14.利用__DataInputStream______类和____DataOutputStream____类提供的成员方法可以方便地从文件中读写不同类型的数据。
3、编程题:
1.编写一个程序,其功能是将两个文件的内容合并到一个文件中。
2.编写一个程序实现以下功能:
产生5000个1~9999之间的随机整数,将其存入文本文件a.txt中。
②从文件中读取这5000个整数,并计算其最大值、最小值和平均值并输出结果。
1.
importjava.io.BufferedReader;
importjava.io.File;
importjava.io.IOException;
importjava.io.InputStreamReader;
publicclasst71{
publicstaticvoidmain(String[]args){
InputStreamReaderisr=newInputStreamReader(System.in);
BufferedReaderbr=newBufferedReader(isr);
Filefin1,fin2,fout;
try{
System.out.println("InputtheFirstinputfilename:
");
fin1=newFile(br.readLine());
if(!
fin1.exists()){
System.out.println("notexist!
");
System.exit(0);
}
System.out.println("Inputthesecondinputfilename:
");
fin2=newFile(br.readLine());
if(!
fin2.exists()){
System.out.println("notexist!
");
System.exit(0);
}
System.out.println("inputtheoutputfilename:
");
fout=newFile(br.readLine());
if((newJoinFiles(fin1,fin2,fout))!
=null)
{
System.out.println("success!
");
}
else{
System.out.println("fail");
}
}catch(IOExceptione){
e.printStackTrace();
}
}
}
importjava.io.File;
importjava.io.FileReader;
importjava.io.FileWriter;
importjava.io.IOException;
publicclassJoinFiles{
JoinFiles(Filefin1,Filefin2,Filefout)throwsIOException{
FileReaderfr1=newFileReader(fin1);
FileReaderfr2=newFileReader(fin2);
FileWriterfw=newFileWriter(fout);
intch;
while((ch=fr1.read())!
=-1){
fw.write(ch);
}
while((ch=fr2.read())!
=-1)
fw.write(ch);
fr1.close();
fr2.close();
fw.close();
}
}
2.
importjava.io.DataInputStream;
importjava.io.DataOutputStream;
importjava.io.File;
importjava.io.FileInputStream;
importjava.io.FileNotFoundException;
importjava.io.FileOutputStream;
importorg.omg.Messaging.SyncScopeHelper;
publicclasst72{
staticintmax,min,sum=0;
staticint[]a=newint[5000];
publicstaticvoidmain(String[]args){
Filef=newFile("a.txt");
if(f==null){
System.out.println("Can'tcreatethefile");
System.exit(0);
}
genRandom(f);
calculate(f);
}
staticvoidgenRandom(Filef){
try{
FileOutputStreamfos=newFileOutputStream(f);
DataOutputStreamdos=newDataOutputStream(fos);
for(inti=0;i<5000;i++){
dos.writeInt((int)(Math.random()*10000));
}
dos.close();
}catch(FileNotFoundExceptione){
e.printStackTrace();
}catch(Exceptione){
e.printStackTrace();
}
}
staticvoidcalculate(Filef){
try{
FileInputStreamfis=newFileInputStream(f);
DataInputStreamdis=newDataInputStream(fis);
inti;
for(i=0;i<5000;i++){
a[i]=dis.readInt();
}
dis.close();
max=a[0];
min=a[0];
for(i=0;i<5000;i++){
if(maxif(min>a[i])min=a[i];
sum+=a[i];
}
}catch(FileNotFoundExceptione){
e.printStackTrace();
}catch(Exceptione){
e.printStackTrace();
}
intaverage=sum/5000;
System.out.println("max="+max+"\tmin="+min);
System.out.println("sum="+sum+"\taverage="+average);
}
}
答案:
1、选择题:
1~5:
CABDB6~10:
BCBAC11~13:
DAA
2、填空题:
1.文档对象模型
2.字节流、字符流、文件流、对象流、管道流
3.输入、输出
4.InputStream、OutputStream
5.DataInput、DataOutput
6.Reader、Writer
7.键盘、显示器
8.Static
9.二进制
10.文件
11.目录、目录
12.File、File
13.数据的输入输出、文件和目录
14.FileInputStream、FileOutputStream
15.DataInputStream、DataOutputStream
16.Object、DataInput、DataOutput
3、简答题:
1.答:
数据存储:
XML和数据库一样,都可以实现数据的持久化存储。
两者相比,数据库提供了更强有力的数据存储和分析能力,XML仅仅是存储数据,XML与其它数据表现形式最大的不同是它极其简单。
数据交换:
在实际应用中,由于各个计算机所使用的操作系统,数据库不同,因此数据之间的交换向来是头疼的事情,但可以使用XML交换数据来解决这个问题。
例如,可以将数据库A中的数据转换成标准的XML文件,然后数据库B再将该标准的XML文件转换成适合自己数据要求的数据,以便达到交换数据的目的。
数据配置:
许多应用都将配置数据存储在XML文件中。
使用XML配制文件可读性强,灵活性高,不用像其它应用那样要经过重新编译才能修改和维护应用。
2.答:
DOM解析的优点:
整个文档树在内存中,便于操作;支持删除、修改、重新排列等多种功能;缺点:
将整个文档调入内存(包括无用的节点),浪费时间和空间;使用场合:
一旦解析了文档还需多次访问这些数据;硬件资源充足(内存、CPU)。
3.答:
SAX解析XML优点:
不用事先调入整个文档,占用资源少;SAX解析器代码比DOM解析器代码小,适于Applet下载。
缺点:
不是持久的;事件过后,若没保存数据,那么数据就丢了;无状态性;从事件中只能得到文本,但不知该文本属于哪个元素;使用场合:
Applet;只需XML文档的少量内容,很少回头访问;机器内存少。
4、编程题:
1.答:
编程分析】本题主要考察对文件流类FileReader和FileWriter的使用方法,实现从文件中读取数据,以及向文件中输入数据。
第一步:
采用面向字符的文件流读出文件内容,使用FileReader类的read()方法,写文件内容使用FileWriter类的write()方法。
第二步:
通过键盘方式输入要合并的两个源文件的文件名以及合并后的新文件名。
第三步:
将两个源文件内容分别读出并写入到目标文件中。
【参考程序】
importjava.io.*;
publicclassX8_3_2{
publicstaticvoidmain(Stringargs[]){
InputStreamReaderisr=newInputStreamReader(System.in);
BufferedReaderbr=newBufferedReader(isr);
Filefin1,fin2,fout;
try{
System.out.print("Inputthefirstinputfilename:
");
fin1=newFile(br.readLine());
if(!
fin1.exists()){
System.out.println("Thefiledoesn'texist!
");
System.exit(0);
}
System.out.print("Inputthesecondinputfilename:
");
fin2=newFile(br.readLine());
if(!
fin2.exists()){
System.out.println("Thefiledoesn'texist!
");
System.exit(0);
}
System.out.print("Inputtheoutputfilename:
");
fout=newFile(br.readLine());
if((newJoinFiles(fin1,fin2,fout))!
=null){//合并文件
System.out.println("Successfulinjoiningfiles!
");
}
else{
System.out.println("failinjoiningfiles!
");
}
}catch(IOExceptione){
e.printStackTrace();
}
}
}
classJoinFiles{
JoinFiles(Filefin1,Filefin2,Filefout)throwsIOException{
FileReaderfr1=newFileReader(fin1);
FileReaderfr2=newFileReader(fin2);
FileWriterfw=newFileWriter(fout);
intch;
while((ch=fr1.read())!
=-1)
fw.write(ch);
while((ch=fr2.read())!
=-1)
fw.write(ch);
fr1.close();
fr2.close();
fw.close();
}
}
【运行结果】
Inputthefirstinputfilename:
f1.txt
Inputthesecondinputfilename:
f2.txt
Inputtheoutputfilename:
fout.txt
Successfulinjoiningfiles!
2.答:
【编程分析】本题主要考察利用FileOutputStream、DataOutputStream、FileInputStream、DataInputStream等类实现对文件的操作。
第一步:
产生5000个1~9999之间的随机整数,将其存入文本文件a.txt中,本参考程序利用方法“genRandom(Filef)”来实现,本方法使用了FileOutputStream和DataOutputStream两个类。
第二步:
将文件中的数据取出进行计算最大值、最小值、平均值以及求和,本参考程序利用方法“calculate(Filef)”来实现,本方法使用了FileInputStream和DataInputStream两个类。
【参考程序】
importjava.io.*;
publicclassX8_3_3{
staticintmax,min,sum=0;
staticint[]a=newint[5000];
publicstaticvoidmain(Stringargs[]){
Filef=newFile("a.txt");
if(f==null){
System.out.println("Can'tcreatethefile");
System.exit(0);
}
genRandom(f);
calculate(f);
}
staticvoidgenRandom(Filef){//产生随机数方法
try{
FileOutputStreamfos=newFileOutputStream(f);
DataOutputStreamdos=newDataOutputStream(fos);
for(inti=0;i<5000;i++){
dos.writeInt((int)(Math.random()*10000));
}
dos.close();
}catch(FileNotFoundExceptione){
e.printStackTrace();
}catch(Exceptione){
e.printStackTrace();
}
}
staticvoidcalculate(Filef){//计算最大值、最小值、平均值以及求和方法
try{
FileInputStreamfis=newFileInputStream(f);
DataInputStreamdis=newDataInputStream(fis);
inti;
for(i=0;i<5