《Java语言程序设计》第3版第8章.docx
- 文档编号:9997182
- 上传时间:2023-02-07
- 格式:DOCX
- 页数:24
- 大小:20.46KB
《Java语言程序设计》第3版第8章.docx
《《Java语言程序设计》第3版第8章.docx》由会员分享,可在线阅读,更多相关《《Java语言程序设计》第3版第8章.docx(24页珍藏版)》请在冰豆网上搜索。
《Java语言程序设计》第3版第8章
第8章输入/输出流
【1】简述java流的概念、特点、及表示
[解答]:
Java的流是一个比文件所包含范围更广的概念。
流是一个可被顺序访问的数据序列,是对计算机输入数据和输出数据的抽象。
Java中的流是用类来表示。
Java流的特点:
数据可以是未经加工的原始二进制数据,也可以是经一定编码处理后
符合某种格式规定的特定数据,java中的数据流有字节流和字符流之分。
【2】描述java.io包中输入/输出流的类层次结构。
[解答]:
以字节为导向的stream
基类是InputStream和OutputSteam
stream代表的是任何有能力产出数据的数据源,或是任何有能力接收数据的接收源。
在Java的IO中,所有的stream(包括Input和Outputstream)都包括两种类型:
a)inputstream:
1)ByteArrayInputStream:
把内存中的一个缓冲区作为InputStream使用
2)StringBufferInputStream:
把一个String对象作为InputStream
3)FileInputStream:
把一个文件作为InputStream,实现对文件的读取操作
4)PipedInputStream:
实现了pipe的概念,主要在线程中使用
b)Outstream
1)ByteArrayOutputStream:
把信息存入内存中的一个缓冲区中
2)FileOutputStream:
把信息存入文件中
3)PipedOutputStream:
实现了pipe的概念,主要在线程中使用
以Unicode字符为导向的stream包括下面几种类型:
a)InputStream
1)CharArrayReader:
与ByteArrayInputStream对应
2)StringReader:
与StringBufferInputStream对应
3)FileReader:
与FileInputStream对应
4)PipedReader:
与PipedInputStream对应
b)OutStream
1)CharArrayWrite:
与ByteArrayOutputStream对应
2)StringWrite:
无与之对应的以字节为导向的stream
3)FileWrite:
与FileOutputStream对应
4)PipedWrite:
与PipedOutputStream对应
以字符为导向的stream基本上对有与之相对应的以字节为导向的stream。
两个对应类实现的功能相同,只是在操作时的导向不同。
【3】说明输入流,输出流的概念及作用。
如何实现输入和输出流类的读写方法的传递。
[解答]:
就流的运行方向来说,流分为输入流和输出流,输入流将外部数据引入计算机。
输出流是交数据引导到外部设备。
输入输出流读写方法的传递一般可以以一个字节缓冲数组做为中间的桥梁。
【4】解释字节流,字符流,字节文件输入流和字符文件输出流的含义。
[解答]:
字节流:
以二进制数据这最基本的数据表示方式的流。
字符流:
按每16位的Unicode码来处理字符数据的流。
字节文件输入流:
字节文件输入流是从字节输入流中继承而来的,它用于处理二进制的文件输入操作。
字符文件输出流:
字符文件输出流是从字符输出流中继承而来的,它用于处理字符为操作单位的文件数据的输出。
【5】简述File类在文件管理中的作用与使用方法。
[解答]:
作用:
提供了描述文件和目录的操作与管理的方法,它不负责数据的输入,输出。
专门用来管理磁盘文件与目录。
使用方法:
(1)创建File类的对象。
(2)以getName()等方法来判断或获取文件或目录信息。
(3)对文件及目录进行操作
【6】计算Fibonacii数列,a1=1,a2=1...an=an-1+an-2即前两个数是1,从3个数开始,每个数是前两个数的和,计算数列的前20项,并用字节文件流的方式输出到一个文件,要求每5项1行。
[解答]:
importjava.io.File;
importjava.io.FileOutputStream;
/**
*计算Fibonacii数列的前20项
*/
publicclassFibonacii{
//数列的长度
inti=0;
int[]f=null;
publicFibonacii(inti){
this.i=i;
}
/**
*得到数列的函数
*@returnint[]
*/
publicint[]getFibonacii(){
if(i<2){
returnnewint[]{1,1};
}else{
f=newint[i];
//给数列赋初值
f[0]=1;
f[1]=1;
for(intk=2;k
f[k]=f[k-1]+f[k-2];
}
returnf;
}
}
/**
*保存入文件
*@paramname
*/
publicvoidsaveToFile(Stringname){
try{
Filefile=newFile(name);
FileOutputStreamfo=newFileOutputStream(file);
//换行
intl='\n';
for(inti=0;i<20;i++){
//每5个一行
if(i!
=0&&i%5==0){
fo.write(l);
}
fo.write(f[i]);
}
}catch(Exceptione){
e.printStackTrace();
}
}
//testanddisplay
publicstaticvoidmain(String[]args){
int[]fb20=null;
Fibonaciifb=newFibonacii(20);
fb20=fb.getFibonacii();
//打印
for(inti=0;i<20;i++){
System.out.println(fb20[i]);
}
fb.saveToFile("D:
\\a.dat");
}
}
【7】利用文件输入/输出流类编程实现一个信函文件的显示与复制
[解答]:
importjava.io.BufferedReader;
importjava.io.BufferedWriter;
importjava.io.File;
importjava.io.FileReader;
importjava.io.FileWriter;
/**
*文件的显示和复制
*/
publicclassFileDisplayAndCopy{
//复制的文件
FilefileCopy;
//读取的文件名
Stringfilename="";
//用来存放数据的StringBuffer;
StringBuffersb=newStringBuffer("");
/**
*@paramfileCopy拷贝的文件
*@paramfilename源文件
*/
publicFileDisplayAndCopy(StringfileCopy,Stringfilename){
this.filename=filename;
this.fileCopy=newFile(fileCopy);
}
/**
*读出内容并显示
*/
publicvoiddisplay(){
try{
FileReaderfr=newFileReader(filename);
BufferedReaderbr=newBufferedReader(fr);
//读数据
Stringstr;
while((str=br.readLine())!
=null){
sb.append(str);
sb.append('\n');
}
}catch(Exceptione){
e.printStackTrace();
}
//显示
System.out.println(sb.toString());
}
publicvoidcopy(){
try{
FileWriterfw=newFileWriter(fileCopy);
BufferedWriterbw=newBufferedWriter(fw);
//写数据流
bw.write(sb.toString(),0,sb.toString().length());
bw.flush();
}catch(Exceptione){
e.printStackTrace();
}
}
//test
publicstaticvoidmain(String[]args){
FileDisplayAndCopyfda=newFileDisplayAndCopy("d:
\\a.txt","d:
\\b.txt");
fda.display();
fda.copy();
}
}
【8】建立一个文本文件,输入一段短文,编写一个程序,统计文件中字符的个数,并将结果写入另一个文件
[解答]:
importjava.io.BufferedReader;
importjava.io.BufferedWriter;
importjava.io.File;
importjava.io.FileReader;
importjava.io.FileWriter;
/**
*统计文件中字符的个数,并将结果写入另一个文件
*/
publicclassFileCharCounter{
//源文件和目的文件
FilefileDec;
Stringsrc;
StringBuffersb=newStringBuffer("");
publicFileCharCounter(Stringdec,Stringsrc){
this.fileDec=newFile(dec);
this.src=src;
}
/**
*统计数目
*@return
*/
publicintcount(){
try{
sb=newStringBuffer("");
FileReaderfr=newFileReader(src);
BufferedReaderbr=newBufferedReader(fr);
//读数据
Stringstr;
while((str=br.readLine())!
=null){
sb.append(str);
}
}catch(Exceptione){
e.printStackTrace();
}
returnsb.toString().length();
}
/**
*写文件
*/
publicvoidwriteTo(){
try{
FileWriterfw=newFileWriter(fileDec);
BufferedWriterbw=newBufferedWriter(fw);
//写数据流
Stringc=String.valueOf(count());
bw.write(c);
bw.flush();
}catch(Exceptione){
e.printStackTrace();
}
}
//test
publicstaticvoidmain(String[]args){
FileCharCounterfda=newFileCharCounter("d:
\\a.txt","d:
\\b.txt");
System.out.println(fda.count());
fda.writeTo();
}
}
【9】建立一个文本文件,输入学生3门课的成绩,编写一个程序,读入这个文件中的数据,输出每门课的成绩的最小值,最大值和平均值。
[解答]:
成绩.txt文件
id#000001e#98m#76p#76
id#000002e#54m#74p#76
id#000003e#98m#73p#78
id#000004e#98m#77p#76
id#000005e#92m#45p#76
id#000006e#94m#33p#74
id#000007e#98m#88p#76
id#000008e#96m#34p#76
importjava.io.BufferedReader;
importjava.io.FileReader;
importjava.util.ArrayList;
importjava.util.Iterator;
importjava.util.List;
importjava.util.StringTokenizer;
/**
*建立一个文本文件,输入学生3门课的成绩读入这个文件中的数据,输出每门课的成绩的最小值,最大值和平均值。
*/
classStudent{
Stringid;
//英语成绩
floate;
//数字成绩
floatm;
//物理成绩
floatp;
/**
*@returnReturnsthee.
*/
publicfloatgetE(){
returne;
}
/**
*@parame
*Theetoset.
*/
publicvoidsetE(floate){
this.e=e;
}
/**
*@returnReturnstheid.
*/
publicStringgetId(){
returnid;
}
/**
*@paramid
*Theidtoset.
*/
publicvoidsetId(Stringid){
this.id=id;
}
/**
*@returnReturnsthem.
*/
publicfloatgetM(){
returnm;
}
/**
*@paramm
*Themtoset.
*/
publicvoidsetM(floatm){
this.m=m;
}
/**
*@returnReturnsthep.
*/
publicfloatgetP(){
returnp;
}
/**
*@paramp
*Theptoset.
*/
publicvoidsetP(floatp){
this.p=p;
}
}
publicclassCountS{
//文件路径
Stringfilepath;
//list用来存放学生数据
Listlist=newArrayList();
publicCountS(Stringstr){
filepath=str;
init();
}
//初始化操作,用来读数据和解析数据放入相应的对象中
publicvoidinit(){
try{
FileReaderfr=newFileReader(filepath);
BufferedReaderbr=newBufferedReader(fr);
//读数据
Stringstr;
while((str=br.readLine())!
=null){
Students=newStudent();
//解析数据
StringTokenizerst=newStringTokenizer(str.toString(),"");
//前面是标号,后面是数据
Stringfirst="";
Stringdata="";
Stringelem=st.nextToken();
//id的解析
first=elem.split("#")[0];
data=elem.split("#")[1];
s.setId(data);
//英语成绩
elem=st.nextToken();
first=elem.split("#")[0];
data=elem.split("#")[1];
s.setE(Float.valueOf(data).floatValue());
//数学成绩
elem=st.nextToken();
first=elem.split("#")[0];
data=elem.split("#")[1];
s.setM(Float.valueOf(data).floatValue());
//物理成绩
elem=st.nextToken();
first=elem.split("#")[0];
data=elem.split("#")[1];
s.setP(Float.valueOf(data).floatValue());
//加入list
list.add(s);
}
}catch(Exceptione){
e.printStackTrace();
}
}
publicvoidcountAnddisplay(){
//0是最小值,1,最大值2是平均分
float[]e=newfloat[]{100,0,0};
float[]m=newfloat[]{100,0,0};
float[]p=newfloat[]{100,0,0};
for(Iteratorit=list.iterator();it.hasNext();){
Studentele=(Student)it.next();
//英语
if(e[0]>ele.getE()){
e[0]=ele.getE();
}
if(e[1] e[1]=ele.getE(); } e[2]+=ele.getE(); //数学 if(m[0]>ele.getM()){ m[0]=ele.getM(); } if(m[1] m[1]=ele.getM(); } m[2]+=ele.getM(); //物理 if(p[0]>ele.getP()){ p[0]=ele.getP(); } if(p[1] p[1]=ele.getP(); } p[2]+=ele.getP(); } //平均分 e[2]=e[2]/list.size(); m[2]=m[2]/list.size(); p[2]=p[2]/list.size(); //打印 System.out.println("英语最小值: "+e[0]+""); System.out.println("英语最大值: "+e[1]+""); System.out.println("英语平均分: "+e[2]+""); System.out.println("数学最小值: "+m[0]+""); System.out.println("数学最大值: "+m[1]+""); System.out.println("数学平均分: "+m[2]+""); System.out.println("物理最小值: "+p[0]+""); System.out.println("物理最大值: "+p[1]+""); System.out.println("物理平均分: "+p[2]+""); } publicstaticvoidmain(String[]args){ CountScs=newCountS("d: /成绩.txt"); cs.countAnddisplay(); } } 【10】对象流的作用是什么。 [解答]: 可以将对象作为一个整体通过对象流进行传输和存储。 【11】编写程序,保存一个文本对象并检索对象的数据。 [解答]: importjava.io.File; importjava.io.FileInputStream; importjava.io.FileOutputStream; importjava.io.ObjectInputStream; importjava.io.ObjectOutputStream; importjava.io.Serializable; /** *保存一个文本对象并检索对象的数据 */ publicclassConteximplementsSerializable{ //其中的两个文本对象 Stringtext1=""; Stringtext2=""; /** *@returnReturnsthetext1. */ publicStringgetText1(){ returntext1; } /** *@paramtext1 *Thetext1toset. */ publicvoidsetText1(Stringtext1){ this.text1=text1; } /**
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Java语言程序设计 Java 语言程序设计