《Java程序设计精典教程》习题答案 编著:胡伏湘,雷军环 清华大学出版社 第9章习题解答

一、 简答题

1.什么叫流?对流的分类通常有几种方式?
答:流是指一组有顺序的、有起点和终点的字节结合。
流的分类方式有多种:
 根据数据流动的方向,可分为输入流和输出流。
输入流:只能从中读取数据,而不能向其写出数据
输出流:只能向其写出数据,而不能从中读取数据
 根据处理数据的单位划分,可分为字符流和字节流
字节流:以字节为单位进行数据传输,每次传送一个或多个字节
字符流:以Unicode字符为单位进行数据传输,每次传送一个或多个字符
 根据数据流所关联的是数据源还是其他数据流,可分为节点流和处理流
节点流:直接从指定的位置(如磁盘文件或内存区域)读或写
处理流:对一个巳存在的流的连接和封装,通过对所封装的流的功能调用实现数据的读/写功能,处理流并不直接连接到数据流。

2.Java的所有I/O流都是四个抽象类的子类,这四个抽象类是什么?
答:
 InputStream:是所有字节输入流的父类
 OutputStream:是所有字节输出流的父类
 Reader:是所有输入字符流的父类
 Writer:是所有输出字符流的父类

3.写出下面这些输入输出流类的输入输出操作的特点。
(1) InputStream和OutputStream
(2) DataInputStream 和DataOutputStream
(3) FileInputStream和FileOutputStream
(4) PrintStream
(5) RandomAccessFile
答:
(1)一个字节一个字节地输入输出数据
(2)按照不同的数据类型输入输出数据
(3)一个字节一个字节地输入输出数据
(4)把数据转化成字符串输出
(5)能够随机访问普通文件

4.File类的作用是什么?
答:File类是I/O包中唯一能够代表磁盘文件本身的对象,使用File类,我们可以方便地建立与某磁盘文件的连接。一个对应着某磁盘文件或目录的File对象一经创建,我们就可以通过调用它的方法来获得该文件或目录的属性,File类中还定义了一些对文件或目录进行管理、操作的方法,利用这些方法可以完成对文件和目录的建立、删除、查询、重命名等操作。

5.Java语言是否可以读入和写出文本格式的文件?如果可以,使用的类是什么?
答:可以。
使用的类是FileReader和FileWriter

6.流文件读入和写出的操作过程有哪些?
答:流文件读入和写出的操作过程如下:
(1)利用文件名字符串或File对象创建输入输出流对象
以创建FileInputStream为例,它有两个常用的构造函数:
FileInputStream(String FileName):利用文件名(包括路径名)字符串创建从该文件读入数据的输入流
FileInputStream(File f):利用巳存在的File对象创建从该对象对应的磁盘文件中读入数据的输入流
注意:在创建文件输入或输出流时可能因给出的文件名不对,或路径不对,或文件的属性不对不能进行读写而造成错误,此时系统会抛出异常FileNotFoundException,所以创建文件输入输出流并调用构造函数的语句应该被包括在try块中,并有相应的catch块来处理它们可能产生的异常。
(2)从文件输入输出流中读写数据
从文件输入输出流中读写数据有两种方式:一是直接利用FileInputStream和FileOutputStream自身的读写功能;另一种是以FileInputStream和FileOutputStream为原始数据源,再套接上其他功能较强大的输入输出流完成文件的读写操作。

二、 编程题

1.设计一个程序,可以接受用户从键盘输入的多个字符,换行表示字符输入结束。输入完后将其显示在屏幕上。

import java.io.*;

public class XT009201  {
	public static void main(String args[])  {
		String s="";
		System.out.print("请输入一个字符串:");
		try{
			BufferedReader in=
			    new BufferedReader(new InputStreamReader(System.in));
			s=in.readLine();
		}   
	  catch(IOException e)  {
	    System.out.println(e);
	  }
	  System.out.println("你输入的字符串是:" + s);
	}
}


2.编写程序,实现当用户输入的文件名不存在时,可以重新输入,直到输入一个正确的文件名后,打开这个文件并将文件的内容输出到屏幕上的功能。

import java.io.*;

public class XT009202  {
  public static void main(String args[])  {
    String str;
    File sourceFile;
    BufferedReader source;
    while (true)  {
      try  {
        InputStreamReader din = new InputStreamReader(System.in);
        BufferedReader in = new BufferedReader(din);
        System.out.print("请输入文件路径及文件名:");
        sourceFile = new File(in.readLine());
        source = new BufferedReader(new FileReader(sourceFile));
        while ( ( str = source.readLine() ) !=null )  { 
          System.out.println(str);
        }
        din.close();
        in.close();
        break;
      }
      catch ( IOException e )  {
        System.out.println("I/O错误!重新输入文径路径及文件名");
      } 
    }//end while
  }
}


3.编写程序,将程序文件的源代码复制到程序文件所在目录下的“temp.txt”文件中。

import java.io.*;

public class XT009203  {
  public static void main(String args[])  {
    try  {
      FileInputStream fis = new FileInputStream("XT009203.java");
      FileOutputStream fos = new FileOutputStream("temp.txt");
      int read = fis.read();
      while ( read!=-1 ) {
        fos.write(read);
        read = fis.read();
      }
      fis.close();
      fos.close();
          
    }
    catch ( IOException e )  {
      System.out.println(e);
    }
  }
}

4.编写代码,通过“文件”菜单项打开一个本地机的文件,把其内容显示在文本区中,经过修改后再利用“文件”菜单的“保存”菜单项把修改后的内容保存回磁盘中原来的文本里。
答:略

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值