Java程序设计案例教程第二版周怡张英主编第11章习题答案Word格式.docx
《Java程序设计案例教程第二版周怡张英主编第11章习题答案Word格式.docx》由会员分享,可在线阅读,更多相关《Java程序设计案例教程第二版周怡张英主编第11章习题答案Word格式.docx(13页珍藏版)》请在冰豆网上搜索。
D.Filefile5=newFile("
病历目录.txt"
Filefile6=newFile(file5,"
6.要在磁盘上创建一个文件,可以使用哪些类的实例?
(D)
A.FileOutputStreamB.RandomAccessFileC.FileD.以上都可以
三.填空题
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读取字节并将其解码为字符,将字节流和字符流进行转换。
例如:
BufferedReadermyReaderin=newBufferedReader(newInputStreamReader(System.in));
即通过标准输入System.in构造了一个BufferedReader对象,而BufferedReader具有良好的读文本数据的方法。
3.使用DataInputStream和DataOutputStream的主要目的是什么?
Java的基本数据类型中就有占几个字节的数据,如int型、float型、double型等等,需要一次读写几个字节,因此需要专门的数据输入输出流来处理。
DataInputStream和DataOutputStream分别实现了java.io包中的DataInput和DataOutput接口,能够读写Java基本数据类型的数据和Unicode编码格式的字符串。
这样,在输入输出数据时就不必关心该
数据究竟包含几个字节了。
五.编程题
1.编程实现键盘输入病人CT检查结果,保存至磁盘,并回显至屏幕。
packagepackage11;
importjava.io.*;
publicclassByteFileWrite
{
publicstaticvoidmain(Stringargs[])
FilefilePath=newFile("
d:
\\CTDiagnose\\"
//创建目录,请注意是双反斜杠\\
if(!
filePath.exists())//若目录不存在,则建之
filePath.mkdir();
StringfileName=newString("
CTDiagnose1.txt"
FilebyteFile=newFile(filePath,fileName);
//在filePath目录下建文件类对象,文件名为fileName
try{
System.out.print("
输入CT检查结果:
"
intcount;
byteinbytes[]=newbyte[1024];
count=System.in.read(inbytes);
//读取标准输入流
FileOutputStreambyteFileStream=newFileOutputStream(byteFile);
//创建字节文件输出流对象
byteFileStream.write(inbytes,0,count);
//写入输出流
byteFileStream.close();
//关闭输出流
System.out.println("
CT检查结果已保存到"
+filePath+"
\\"
+fileName+"
中,请查看!
"
}
catch(IOExceptionioe)
{
System.out.println(ioe);
catch(Exceptione)
System.out.println(e);
}//try-catch结束
}//main方法结束
}
程序运行结果如下:
输入CT检查结果:
CT检查结果无异常!
CT检查结果已保存到d:
\CTDiagnose\CTDiagnose1.txt中,请查看!
程序运行结束后,到d:
盘CTDiagnose文件夹下查看CTDiagnose1.txt文件,发现文件中数据为“CT检查结果无异常!
”。
2.使用DataInputStream和DataOutputStream编程实现护士档案信息管理,通过键盘输入护士姓名、工号、性别、年龄、职称、所属科室、绩效考核信息,以文件名“护士档案.txt”保存至磁盘,并从磁盘读出所存数据回显至屏幕。
publicclassNurseInfoSys{
publicstaticvoidmain(String[]args){
Stringstrdir,filename;
strdir="
\\护士档案目录"
;
Filefiledir=newFile(strdir);
//创建病历读写目录
filedir.exists())filedir.mkdir();
Nursenurse1=newNurse(1000,"
张敏飞"
32,'
女'
护士长"
优秀一级"
Nursenurse2=newNurse(1001,"
周捷雨"
25,'
护士"
良好一级"
BufferedReaderbin=newBufferedReader(newInputStreamReader(System.in));
********护士档案信息系统***********"
System.out.print("
请输入护士档案文件名(按回车结束):
filename=bin.readLine();
bin.close();
//创建护士信息文件
Filefile_create=newFile(filedir,filename);
if(!
file_create.exists())file_create.createNewFile();
//创建文件输出流对象
FileOutputStreamfileout=newFileOutputStream(file_create);
//创建数据输出流对象
DataOutputStreamdoutfile=newDataOutputStream(fileout);
//写档案
writeFile(doutfile,nurse1);
writeFile(doutfile,nurse2);
doutfile.close();
//关闭数据输出流
fileout.close();
//关闭文件输出流
System.out.println("
档案:
+file_create+"
创建完毕!
\n>
>
读取护士档案文件<
<
工号"
+"
\t"
姓名"
年龄"
性别"
+"
职称"
绩效"
for(inti=0;
i<
60;
i++)
-"
//输出分隔符
System.out.println();
//创建文件输入流对象
FileInputStreamfilein=newFileInputStream(file_create);
//创建数据输入流对象
DataInputStreamdinfile=newDataInputStream(filein);
for(inti=1;
=2;
i++){
//读取档案文件
longdno=dinfile.readLong();
Stringdname=dinfile.readUTF();
intage=dinfile.readInt();
charsex=dinfile.readChar();
Stringposition=dinfile.readUTF();
Stringgrade=dinfile.readUTF();
System.out.println(dno+"
+dname+"
+age+"
+sex+"
+position+"
+grade);
}//for结束
dinfile.close();
//关闭数据输入流
filein.close();
//关闭文件输入流
catch(IOExceptione){
System.out.println(e.toString());
staticvoidwriteFile(DataOutputStreamdoutfile1,Nursenurse1)
//写档案
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(IOExceptione){
System.out.println(e.toString());
}//writeFile结束
}//classNurseInfosys结束
classNurse{
intnno;
Stringnname;
intage;
charsex;
Stringposition;
Stringgrade;
publicNurse(){
this.nno=0;
this.nname="
未知"
this.age=0;
this.sex='
无'
this.position="
this.grade="
}//publicNurse()
publicNurse(intnno,Stringnname,intage,charsex,Stringposition,Stringgrade){
if(nno>
0)this.nno=nno;
this.nname=nname;
this.age=age;
this.sex=sex;
this.position=position;
this.grade=grade;
}//publicNurse(intnno,Stringnname,intage,charsex,…)
}//classNurse
3.编写一个程序,从键盘输入一串字符,统计这串字符中英文字母、数字、其他符号的字符数,将其结果保存到磁盘中,文件名自定。
package11;
publicclassCountString{
privatestaticintnumOfDigit;
privatestaticintnumOfEnglishChar;
privatestaticintnumOfOther;
publicstaticvoidmain(String[]args){
numOfDigit=0;
numOfEnglishChar=0;
numOfOther=0;
InputStreamReaderisr=newInputStreamReader(System.in);
BufferedReaderbr=newBufferedReader(isr);
Strings=null;
请输入一行字符串:
try{
//在键盘上读一行
s=br.readLine();
for(inti=0;
=s.length()-1;
charc=s.charAt(i);
if(c>
='
0'
&
c<
9'
){
numOfDigit++;
}
elseif((c>
a'
&
c<
z'
)||(c>
A'
Z'
)){
numOfEnglishChar++;
else
numOfOther++;
}
System.out.println();
br.close();
System.out.println("
数字个数为:
+numOfDigit);
英文字符个数为:
+numOfEnglishChar);
+numOfOther);
Stringstrdir,filename="
count.txt"
strdir="
\\第11章目录"
//创建文件目录
filedir.exists())
filedir.mkdir();
//创建信息文件
//创建文件输出流对象
//创建数据输出流对象
doutfile.writeUTF("
输入的字符串为:
+s);
\r\n"
+numOfDigit+"
\n"
数字字符个数为:
+numOfEnglishChar+"
其他字符个数为:
+numOfOther+"
}
catch(IOExceptione){
e.printStackTrace();
}
}
4.编写一个程序,读取某个文件(该文件中存取了一些字符),统计这串字符中英文字母、数字、其他符号的字符数,将其结果保存到磁盘中,文件名自定。
publicclassCountStringOfFile{
读取文件:
Filefile_input1=newFile("
C:
\\in.txt"
intn;
InputStreamReaderfileinput;
try{
fileinput=newInputStreamReader(newFileInputStream(file_input1));
try{
while((n=fileinput.read())!
=-1)
s=s+(char)n;
fileinput.close();
}catch(IOExceptione){
//TODOAuto-generatedcatchblock
}
}catch(FileNotFoundExceptione1){
//TODOAuto-generatedcatchblock
e1.printStackTrace();
///////////////////////////////
try{
countOfFile.txt"
filedir