《Java语言程序设计》第3版第8章.docx

上传人:b****2 文档编号:3222880 上传时间:2023-05-05 格式:DOCX 页数:24 大小:20.46KB
下载 相关 举报
《Java语言程序设计》第3版第8章.docx_第1页
第1页 / 共24页
《Java语言程序设计》第3版第8章.docx_第2页
第2页 / 共24页
《Java语言程序设计》第3版第8章.docx_第3页
第3页 / 共24页
《Java语言程序设计》第3版第8章.docx_第4页
第4页 / 共24页
《Java语言程序设计》第3版第8章.docx_第5页
第5页 / 共24页
《Java语言程序设计》第3版第8章.docx_第6页
第6页 / 共24页
《Java语言程序设计》第3版第8章.docx_第7页
第7页 / 共24页
《Java语言程序设计》第3版第8章.docx_第8页
第8页 / 共24页
《Java语言程序设计》第3版第8章.docx_第9页
第9页 / 共24页
《Java语言程序设计》第3版第8章.docx_第10页
第10页 / 共24页
《Java语言程序设计》第3版第8章.docx_第11页
第11页 / 共24页
《Java语言程序设计》第3版第8章.docx_第12页
第12页 / 共24页
《Java语言程序设计》第3版第8章.docx_第13页
第13页 / 共24页
《Java语言程序设计》第3版第8章.docx_第14页
第14页 / 共24页
《Java语言程序设计》第3版第8章.docx_第15页
第15页 / 共24页
《Java语言程序设计》第3版第8章.docx_第16页
第16页 / 共24页
《Java语言程序设计》第3版第8章.docx_第17页
第17页 / 共24页
《Java语言程序设计》第3版第8章.docx_第18页
第18页 / 共24页
《Java语言程序设计》第3版第8章.docx_第19页
第19页 / 共24页
《Java语言程序设计》第3版第8章.docx_第20页
第20页 / 共24页
亲,该文档总共24页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

《Java语言程序设计》第3版第8章.docx

《《Java语言程序设计》第3版第8章.docx》由会员分享,可在线阅读,更多相关《《Java语言程序设计》第3版第8章.docx(24页珍藏版)》请在冰点文库上搜索。

《Java语言程序设计》第3版第8章.docx

《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;

}

/**

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 考试认证 > 财会金融考试

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2