习题11
一. 是非题
1.InputStream类能够被实例化。( 错 )
2.从键盘流向内存的数据流是输入流。( 对 )
3.FileReader是用文件字节流的的读操作。( 错 ) 4.打开一个文件时不可能会产生IOException。( 错 ) 5.Java的标准输入对象是System.in。( 对 )
二. 选择题
1.InputStream和OutputStream处理的数据是 B 。
A. 位 B. 字节 C. 字符 D. 任意类型
2.以下哪一个类的对象可以是DataInputStream的构造函数的参数? C
A. File B. String C. FileInputStream D. FileOutputStream 3.下列不是java的输入输出流的是 C A. 文本流 B. 字节流 C. 字符流 D. 文件流 4.下列属于文件输入输出类的是( A ) A. FileInputStream和FileOutputStream B. BufferInputStream和BufferOutputStream C. DataInputStream和DataOutputStream D. 以上都是
5.下面对File类构造函数使用不正确的是?( D )
A. File file1=new File(\ 病历目录\
B. File file2=new File(\病历目录\
C. File file3=new File(\病历目录\ File file4=new File(file3, \ D. File file5=new File(\病历目录.txt\ File file6=new File(file5, \
6.要在磁盘上创建一个文件,可以使用哪些类的实例?( D )
A. FileOutputStream B. RandomAccessFile C.File D.以上都可以
三. 填空题
1.按照流的方向来分,I/O流分为输入流和输出流。
2.按照程序处理的内容来分,I/O流分为字符流和字节流。 3.Java的标准输出对象是System.out。
4.所有的输入输出类都包含在java.io包中,程序开头必须都要import该包。 5.将一个长整型的数据保存到文件应该使用writeLong方法。 6.Java中的字符输出流都是抽象类Writer的子类。 四. 简答题
1. 解释字节流和字符流、文件输入流和文件输出流的含义及区别? 答:字节流是以byte为基本处理单位的流;而字符流是以16位的Unicode码为处理单位的流。基本输入流InputStream)和基本输出流(OutputStream)是处理以字节(8个二进制位)
为单位的字节流类。
字符流Reader和Writer类是专门处理16位Unicode字符组成的文本流类,读写以字符(Unicode)为单位进行。
在java.io包中定义的大多数类是实行流式操作的,但文件操作类不是,它独立于InputStream类和OutpuStream等类。要完成对文件内容的读取和写入,需要使用java.io 包中的FileInputStream/FileOutputStream字节输入输出流类或FileReader/FileWriter字符输入输出流类。FileInputStream/FileOutputStream这两个类作为InputStream类和 OutputStream类的子类,重写了其父类的大部分方法,专门用来进行文件的I/O处理。但由于FileInputStream和FileOutputStream直接从InputStream和OutputStream继承而来,并没有对其功能扩充,因此所有的读写操作只能以字节为单位对二进制数据进行处理,FileReader/FileWriter类则被设计用于读取文件和向文件写入字符数据。
2. InputStreamReader和OutputStreamWriter的主要作用是什么?
答:由于我们现在的操作系统平台,输入输出主要还是读写非Unicode编码的文件,所以在实际编程中,一般都是借用一对桥梁类InputStreamReader/OutputStreamWriter,它们分别用来连接字节流InputStream和OutputStream对象,它们使用指定的 charset 读取字节并将其解码为字符,将字节流和字符流进行转换。 例如: BufferedReader myReaderin = new BufferedReader(new InputStreamReader(System.in)); 即通过标准输入System.in构造了一个BufferedReader对象,而BufferedReader具有良好的读文本数据的方法。
3. 使用DataInputStream和DataOutputStream的主要目的是什么?
答:Java的基本数据类型中就有占几个字节的数据,如int型、float型、double型等等,需要一次读写几个字节,因此需要专门的数据输入输出流来处理。DataInputStream和DataOutputStream分别实现了java.io包中的DataInput和DataOutput接口,能够读写Java基本数据类型的数据和Unicode编码格式的字符串。这样,在输入输出数据时就不必关心该
数据究竟包含几个字节了。
五. 编程题
1.编程实现键盘输入病人CT检查结果,保存至磁盘,并回显至屏幕。 package package11; import java.io.*; public class ByteFileWrite { public static void main(String args[]) { File filePath=new File(\ //创建目录,请注意是双反斜杠\\\\ if(!filePath.exists()) //若目录不存在,则建之 filePath.mkdir(); String fileName=new String(\ File byteFile=new File(filePath,fileName); //在filePath目录下建文件类对象,文件名为fileName try{ System.out.print(\输入CT检查结果: \ int count; byte inbytes[] = new byte[1024]; count = System.in.read(inbytes); //读取标准输入流 FileOutputStream byteFileStream = new FileOutputStream(byteFile); //创建字节文件输出流对象 byteFileStream.write(inbytes,0,count); //写入输出流 byteFileStream.close(); //关闭输出流 System.out.println(\检查结果已保存到\中,请 查看!\ } catch (IOException ioe) { System.out.println(ioe); } catch (Exception e) { System.out.println(e); }//try-catch结束 }//main方法结束 } 程序运行结果如下:
输入CT检查结果: CT检查结果无异常! CT检查结果已保存到d:\\ CTDiagnose \\ CTDiagnose1.txt中,请查看!
程序运行结束后,到d:盘CTDiagnose文件夹下查看CTDiagnose1.txt文件,发现文件中数据为“CT检查结果无异常!”。
2.使用DataInputStream和DataOutputStream编程实现护士档案信息管理,通过键盘输入护士姓名、工号、性别、年龄、职称、所属科室、绩效考核信息,以文件名“护士档案.txt”保存至磁盘,并从磁盘读出所存数据回显至屏幕。 package package11; import java.io.*; public class NurseInfoSys { public static void main(String[] args){ String strdir,filename; strdir=\护士档案目录\; File filedir=new File(strdir);//创建病历读写目录 if(!filedir.exists()) filedir.mkdir(); Nurse nurse1=new Nurse(1000,\张敏飞\,32,'女',\护士长\,\优秀一级\); Nurse nurse2=new Nurse(1001,\周捷雨\,25,'女',\护士\,\良好一级\); BufferedReader bin=new BufferedReader(new InputStreamReader(System.in)); System.out.println(\护士档案信息系统***********\); try{ System.out.print(\请输入护士档案文件名(按回车结束):\); filename=bin.readLine(); bin.close(); //创建护士信息文件 File file_create=new File(filedir,filename); if(!file_create.exists()) file_create.createNewFile(); //创建文件输出流对象 FileOutputStream fileout=new FileOutputStream(file_create); //创建数据输出流对象 DataOutputStream doutfile=new DataOutputStream(fileout); //写档案 writeFile(doutfile,nurse1); writeFile(doutfile,nurse2); doutfile.close();//关闭数据输出流 fileout.close();//关闭文件输出流 System.out.println(\档案:\+file_create+\创建完毕!\); System.out.println(\读取护士档案文件<<<<<<<\); System.out.println(\工号\+\+\姓名\+\+\年龄\+\+\性别\+\+ \职称\+\+\绩效\); for(int i=0;i<60;i++) System.out.print(\);//输出分隔符 System.out.println(); //创建文件输入流对象 FileInputStream filein=new FileInputStream(file_create); //创建数据输入流对象 DataInputStream dinfile=new DataInputStream(filein); for(int i=1;i<=2;i++){ //读取档案文件 long dno=dinfile.readLong(); String dname=dinfile.readUTF(); int age=dinfile.readInt(); char sex=dinfile.readChar(); String position=dinfile.readUTF(); String grade=dinfile.readUTF(); System.out.println(dno+\+dname+\+age+\+ sex+\+position+\+grade); }//for结束 dinfile.close(); // 关闭数据输入流 filein.close(); // 关闭文件输入流 } catch(IOException e){ System.out.println(e.toString()); } }//main方法结束 static void writeFile(DataOutputStream doutfile1,Nurse nurse1) //写档案 { try{ doutfile1.writeLong(nurse1.nno); doutfile1.writeUTF(nurse1.nname); doutfile1.writeInt(nurse1.age); doutfile1.writeChar(nurse1.sex); doutfile1.writeUTF(nurse1.position); doutfile1.writeUTF(nurse1. grade); } catch(IOException e){ System.out.println(e.toString()); } }// writeFile结束 }//class NurseInfosys结束