《Java语言程序设计》第3版第8章Word文件下载.docx
《《Java语言程序设计》第3版第8章Word文件下载.docx》由会员分享,可在线阅读,更多相关《《Java语言程序设计》第3版第8章Word文件下载.docx(24页珍藏版)》请在冰点文库上搜索。
![《Java语言程序设计》第3版第8章Word文件下载.docx](https://file1.bingdoc.com/fileroot1/2023-5/5/2b75a9a5-7d8d-450f-8370-5a9d040c059e/2b75a9a5-7d8d-450f-8370-5a9d040c059e1.gif)
与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<
i;
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;
System.out.println(fb20[i]);
fb.saveToFile("
D:
\\a.dat"
);
}
【7】利用文件输入/输出流类编程实现一个信函文件的显示与复制
importjava.io.BufferedReader;
importjava.io.BufferedWriter;
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(){
FileReaderfr=newFileReader(filename);
BufferedReaderbr=newBufferedReader(fr);
//读数据
Stringstr;
while((str=br.readLine())!
=null){
sb.append(str);
sb.append('
//显示
System.out.println(sb.toString());
publicvoidcopy(){
FileWriterfw=newFileWriter(fileCopy);
BufferedWriterbw=newBufferedWriter(fw);
//写数据流
bw.write(sb.toString(),0,sb.toString().length());
bw.flush();
//test
publicstaticvoidmain(String[]args){
FileDisplayAndCopyfda=newFileDisplayAndCopy("
d:
\\a.txt"
"
\\b.txt"
fda.display();
fda.copy();
【8】建立一个文本文件,输入一段短文,编写一个程序,统计文件中字符的个数,并将结果写入另一个文件
*统计文件中字符的个数,并将结果写入另一个文件
publicclassFileCharCounter{
//源文件和目的文件
FilefileDec;
Stringsrc;
StringBuffersb=newStringBuffer("
publicFileCharCounter(Stringdec,Stringsrc){
this.fileDec=newFile(dec);
this.src=src;
*统计数目
*@return
publicintcount(){
sb=newStringBuffer("
FileReaderfr=newFileReader(src);
BufferedReaderbr=newBufferedReader(fr);
while((str=br.readLine())!
=null){
returnsb.toString().length();
*写文件
publicvoidwriteTo(){
FileWriterfw=newFileWriter(fileDec);
Stringc=String.valueOf(count());
bw.write(c);
FileCharCounterfda=newFileCharCounter("
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.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(){
FileReaderfr=newFileReader(filepath);
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();
s.setE(Float.valueOf(data).floatValue());
//数学成绩
s.setM(Float.valueOf(data).floatValue());
s.setP(Float.valueOf(data).floatValue());
//加入list
list.add(s);
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]+"
英语最大值:
+e[1]+"
英语平均分:
+e[2]+"
数学最小值:
+m[0]+"
数学最大值:
+m[1]+"
数学平均分:
+m[2]+"
物理最小值:
+p[0]+"
物理最大值:
+p[1]+"
物理平均分:
+p[2]+"
CountScs=newCountS("
/成绩.txt"
cs.countAnddisplay();
【10】对象流的作用是什么。
可以将对象作为一个整体通过对象流进行传输和存储。
【11】编写程序,保存一个文本对象并检索对象的数据。
importjava.io.FileInputStream;
importjava.io.ObjectInputStream;
importjava.io.ObjectOutputStream;
importjava.io.Serializable;
*保存一个文本对象并检索对象的数据
publicclassConteximplementsSerializable{
//其中的两个文本对象
Stringtext1="
Stringtext2="
*@returnReturnsthetext1.
publicStringgetText1(){
returntext1;
*@paramtext1
*Thetext1toset.
publicvoidsetText1(Stringtext1){
this.text1=text1;