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