资源描述
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、按照流的方向分,可以分为输入流(Input Stream)和输出流(Output Stream)。3. 下面关于流的分类说法错误的一项是( B )。A、为了处理Unicode字符串,定义了一系列的单独类,这些类是从抽象类Reader和Writer继承而来的。B、这些单独类的操作均以单字节(16-bits)的Unicode字符为基础,而非双字节的字符为基础。C、处理流是“处理流的流”,它用来处理其它的流,处理流又被称为高级流(High Level Stream)。D、节点流又常常被称为低级流(Low Level Stream)。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、BufferedOutputStreamC、FileReaderD、DataOutputStream7. 能读入字节数据进行Java基本数据类型判断过虑的类是( A)。A、DataInputStreamB、BufferedInputStreamC、FileReaderD、FileInputStream8. 使用哪一个类可以实现在文件的任意一个位置读写一个记录( C )。A、BufferedInputStreamB、FileReaderC、RandomAccessFileD、FileWriter9. 在通常情况下,下列哪个类的对象可以作为BufferedReader类构造方法的参数( D)。A、FileInputStreamB、FileReaderC、PrintStreamD、InputStreamReader10. 下列关于流类和File类的说法中错误的一项是( A)。A、File类可以修改文件内容B、File类可以重命名文件C、流类不可以新建目录D、流类可以修改文件内容11. 若要删除一个文件,应该使用下列哪个类的实例( A )。A、FileB、RandomAccessFileC、FileReaderD、FileOutputStream2、 填空题: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个19999之间的随机整数,将其存入文本文件a.txt中。从文件中读取这5000个整数,并计算其最大值、最小值和平均值并输出结果。1.import java.io.BufferedReader;import java.io.File;import java.io.IOException;import java.io.InputStreamReader;public class t71 public static void main(String args) InputStreamReader isr = new InputStreamReader(System.in); BufferedReader br=new BufferedReader(isr); File fin1,fin2,fout; try System.out.println(Input the First input file name:); fin1=new File(br.readLine(); if(!fin1.exists() System.out.println(not exist!); System.exit(0); System.out.println(Input the second input file name:); fin2=new File(br.readLine(); if(!fin2.exists() System.out.println(not exist!); System.exit(0); System.out.println(input the output file name:); fout=new File(br.readLine(); if(new JoinFiles(fin1,fin2,fout)!=null) System.out.println(success!); else System.out.println(fail); catch(IOException e)e.printStackTrace();import java.io.File;import java.io.FileReader;import java.io.FileWriter;import java.io.IOException;public class JoinFiles JoinFiles(File fin1,File fin2,File fout) throws IOException FileReader fr1=new FileReader(fin1); FileReader fr2 = new FileReader(fin2);FileWriter fw = new FileWriter(fout);int ch;while(ch=fr1.read()!=-1)fw.write(ch);while(ch=fr2.read() != -1)fw.write(ch);fr1.close();fr2.close();fw.close(); 2.import java.io.DataInputStream;import java.io.DataOutputStream;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import org.omg.Messaging.SyncScopeHelper;public class t72 static int max,min,sum=0;static int a=new int 5000;public static void main(String args)File f=new File(a.txt);if(f=null)System.out.println(Cant create the file);System.exit(0);genRandom(f);calculate(f);static void genRandom(File f)tryFileOutputStream fos = new FileOutputStream(f);DataOutputStream dos = new DataOutputStream(fos);for(int i=0; i5000; i+)dos.writeInt(int)(Math.random()*10000);dos.close();catch(FileNotFoundException e)e.printStackTrace();catch(Exception e)e.printStackTrace();static void calculate(File f)tryFileInputStream fis = new FileInputStream(f);DataInputStream dis = new DataInputStream(fis);int i;for(i=0; i5000; i+)ai = dis.readInt();dis.close();max = a0;min = a0;for(i=0; i5000; i+)if(max ai) min = ai;sum += ai;catch(FileNotFoundException e)e.printStackTrace();catch(Exception e)e.printStackTrace();int average = sum/5000;System.out.println(max = +max+tmin=+min);System.out.println(sum = +sum+taverage=+average);答案:1、 选择题:15: CABDB610:BCBAC1113:D AA2、 填空题:1. 文档对象模型2. 字节流、字符流、文件流、对象流、管道流3. 输入、输出4. InputStream、OutputStream5. DataInput、DataOutput6. Reader、Writer7. 键盘、显示器8. Static9. 二进制10. 文件11. 目录、目录12. File、File13. 数据的输入输出、文件和目录14. FileInputStream、FileOutputStream15. DataInputStream、DataOutputStream16. Object、DataInput、DataOutput3、 简答题: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()方法。第二步:通过键盘方式输入要合并的两个源文件的文件名以及合并后的新文件名。第三步:将两个源文件内容分别读出并写入到目标文件中。【参考程序】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;trySystem.out.print(Input the first input file name: );fin1 = new File(br.readLine();if(!fin1.exists()System.out.println(The file doesnt exist! );System.exit(0);System.out.print(Input the second input file name: );fin2 = new File(br.readLine();if(!fin2.exists()System.out.println(The file doesnt exist! );System.exit(0);System.out.print(Input the output file name: );fout = new File(br.readLine();if(new JoinFiles(fin1,fin2,fout) != null)/ 合并文件System.out.println(Successful in joining files!);elseSystem.out.println(fail in joining files!);catch(IOException e)e.printStackTrace();class JoinFilesJoinFiles(File fin1, File fin2, File fout) throws IOExceptionFileReader fr1 = new FileReader(fin1);FileReader fr2 = new FileReader(fin2);FileWriter fw = new FileWriter(fout);int ch;while(ch=fr1.read() != -1)fw.write(ch);while(ch=fr2.read() != -1)fw.write(ch);fr1.close();fr2.close();fw.close();【运行结果】Input the first input file name: f1.txtInput the second input file name: f2.txtInput the output file name: fout.txtSuccessful in joining files!2. 答:【编程分析】本题主要考察利用FileOutputStream、DataOutputStream、FileInputStream、DataInputStream等类实现对文件的操作。第一步:产生5000个19999之间的随机整数,将其存入文本文件a.txt中,本参考程序利用方法“genRandom(File f)”来实现,本方法使用了FileOutputStream和DataOutputStream两个类。第二步:将文件中的数据取出进行计算最大值、最小值、平均值以及求和,本参考程序利用方法“calculate(File f)”来实现,本方法使用了FileInputStream和DataInputStream两个类。【参考程序】import java.io.*;public class X8_3_3 static int max, min, sum = 0;static int a = new int5000;public static void main(String args) File f = new File(a.txt);if(f = null)System.out.println(Cant create the file);System.exit(0);genRandom(f);calculate(f);static void genRandom(File f)/ 产生随机数方法tryFileOutputStream fos = new FileOutputStream(f);DataOutputStream dos = new DataOutputStream(fos);for(int i=0; i5000; i+)dos.writeInt(int)(Math.random()*10000);dos.close();catch(FileNotFoundException e)e.printStackTrace();catch(Exception e)e.printStackTrace();static void calculate(File f)/ 计算最大值、最小值、平均值以及求和方法tryFileInputStream fis = new FileInputStream(f);DataInputStream dis = new DataInputStream(fis);int i;for(i=0; i5000; i+)ai = dis.readInt();dis.close();max = a0;min = a0;for(i=0; i5000; i+)if(max ai) min = ai;sum += ai;catch(FileNotFoundException e)e.printStackTrace();catch(Exception e)e.printStackTrace();int average = sum/5000;System.out.println(max = +max+tmin=+min);System.out.println(sum = +sum+taverage=+average);【运行结果】max = 9997 min=6sum = 25031340 average=5006
展开阅读全文