版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Java语言程序设计第六章课后习题答案1.将本章例6-1至6-18中出现的文件的构造方法均改为使用File类对象作为参数实现。个人理解:File类只能对整文件性质进行处理,而没法通过自己直接使用file.Read()或者是file.write()类似方法对文件内容进行写或者读取。注意:是直接;下面只提供一个例2变化,其他的你自己做,10几道啊,出这题的人真他妈有病。importjava.io.*;publicclasstest6_2{ publicstaticvoidmain(String[]args)throwsIOException{ StringfileName="D:\\Hello.txt"; Filewriter=newFile(fileName); writer.createNewFile(); BufferedWriterinput=newBufferedWriter(newFileWriter(writer)); input.write("Hello!\n"); input.write("thisismyfirsttextfile,\n"); input.write("你还好吗?\n"); input.close(); }}运行结果:(电脑系统问题,没法换行,所以一般使用BuffereWriter中newLine()实现换行)2.模仿文本文件复制的例题,编写对二进制文件进行复制的程序.//CopyMaker类importjava.io.*;classCopyMaker{StringsourceName,destName;BufferedInputStreamsource; BufferedOutputStreamdest;intline;//打开源文件和目标文件,无异常返回trueprivatebooleanopenFiles(){ try{ source=newBufferedInputStream(newFileInputStream(sourceName)); } catch(IOExceptioniox){ System.out.println("Problemopening"+sourceName);returnfalse;}try{ dest=newBufferedOutputStream(newFileOutputStream(destName));}catch(IOExceptioniox){ System.out.println("Problemopening"+destName);returnfalse;}returntrue;}//复制文件privatebooleancopyFiles(){ try{ line=source.read(); while(line!=-1){ dest.write(line); line=source.read(); } } catch(IOExceptioniox){ System.out.println("Problemreadingorwriting"); returnfalse; } returntrue; }//关闭源文件和目标文件privatebooleancloseFiles(){ booleanretVal=true; try{source.close();} catch(IOExceptioniox){ System.out.println("Problemclosing"+sourceName); retVal=false; } try{dest.close();} catch(IOExceptioniox){ System.out.println("Problemclosing"+destName); retVal=false; } returnretVal; }//执行复制publicbooleancopy(Stringsrc,Stringdst){ sourceName=src;destName=dst;returnopenFiles()&©Files()&&closeFiles();}}//test6_2publicclasstest6_2{ publicstaticvoidmain(String[]args){ Strings1="lin.txt",s2="newlin.txt"; if(newCopyMaker().copy(s1,s2)) System.out.print("复制成功"); else System.out.print("复制失败");}}运行前的两个文本:lin.txt和newlin.txt(为空)运行后:3.创建一存储若干随机整数的文本文件,文件名、整数的个数及范围均由键盘输入。//memory存储类importjava.io.*;importjava.util.Random;publicclassmemory{ privateStringname; privateintcount; privateintMax; privateintMin; publicmemory(Stringn,intc,intmin,intmax){ =n; this.count=c; this.Min=min; this.Max=max; } publicvoidstartmemory(){ try{ FileWriterout=newFileWriter(name); intlimit=Max-Min; Randomrandom=newRandom(); for(inti=1;i<=count;i++){ intnumber=Min+random.nextInt(limit); System.out.print(number); System.out.print(""); out.write(number+""); } out.close(); }catch(IOExceptioniox){ System.out.println("方法startmemory()有问题"); } }}//test6_3importjava.io.*;importjava.util.Scanner;publicclasstest6_3{ publicstaticvoidmain(String[]args)throwsIOException{ //BufferedReader StringfileName; intcount,min,max; Scannerin=newScanner(System.in); System.out.println("输入要存储的文件名"); fileName=in.next(); System.out.println("输入随机数个数"); count=in.nextInt(); System.out.println("输入随机数最小值"); min=in.nextInt(); System.out.println("输入随机数最大值"); max=in.nextInt(); memoryM=newmemory(fileName,count,min,max); M.startmemory(); }}}运行结果:naruto文件存储二进制数:4.分别使用FileWriter和BufferedWriter往文件中写入10万个随机数,比较用时的多少。//FileWriter方法importjava.io.*;publicclassfileWriter{ publicstaticvoidmain(String[]args)throwsIOException{ longtime=System.currentTimeMillis();//当前时间 FileWriterfilewriter=newFileWriter("filewriter.txt"); intnumber; for(inti=1;i<=100000;i++){ number=(int)(Math.random()*10000); filewriter.write(number+""); } filewriter.close(); time=System.currentTimeMillis()-time;//时间差 System.out.println("用时为:"+time+"微秒."); } }运行结果://BufferedWriter方法importjava.io.*;publicclassbufferedWriter{ publicstaticvoidmain(String[]args)throwsIOException{ longtime=System.currentTimeMillis();//当前时间 BufferedWriterfilewriter=newBufferedWriter(newFileWriter("filewriter.txt")); intnumber; for(inti=1;i<=100000;i++){ number=(int)(Math.random()*10000); filewriter.write(number+""); } filewriter.close(); time=System.currentTimeMillis()-time;//时间差 System.out.println("用时为:"+time+"微秒."); } }运行结果:有用时可知:BufferedWriter比FileWriter写入的速度快,当需要写入大量内容,前者效率高。5.生成一html文件,使其能显示2的幂次(0~9)的表格如下:Powerof2Value0112……//test6_5类importjava.io.*;publicclasstest6_5{ publicstaticvoidmain(String[]args)throwsIOException{ BufferedWriterfuck=newBufferedWriter(newFileWriter("6_5.html")); fuck.write("<tableborder=1align=centerwidth=200height=250>"); fuck.newLine(); fuck.write("<tr><tdalign=center>Powerof2<tdalign=center>Value</tr>"); for(inti=0;i<=9;i++){ fuck.write("<tr><tdalign=center>"+i+"<tdalign=center>"+Math.pow(i,2)+"</tr>"); } fuck.write("</table>"); fuck.newLine(); fuck.close(); } }运行结果:6.用记事本程序创建一篇包含几十个英语单词的小文章,要求从屏幕输出每一个单词。//test6_6importjava.io.*;publicclasstest6_6{ publicstaticvoidmain(String[]args)throwsIOException{ FileReaderfr=newFileReader("naruto.txt"); ints; while((s=fr.read())!=-1){ if(s>='a'&&s<='z'||s>='A'&&s<='Z') System.out.print((char)s); else System.out.print("\n"); } fr.close(); }}运行结果:7.从键盘敲入一系列字母,将其存储到文件中,对其进行升序排序后,存储到另一个文件,并显示在屏幕上。//test6_7importjava.io.*;importjava.util.Scanner;publicclasstest6_7{//将字符串存入文件publicstaticvoidWriteToFile(Strings,StringfileName){ try{ FileWriterwriter=newFileWriter(fileName);writer.write(s);writer.close();}catch(IOExceptioniox){ System.out.println("写入字符串s到文件时出错!"); }}//将字符串从文件中读取出来publicstaticStringReadFromFile(StringfileName){ Strings=newString(); try{ BufferedReaderin=newBufferedReader(newFileReader(fileName));s=in.readLine();}catch(IOExceptionio){ System.out.println("从文件中读出字符串时出错!"); }returns;}//将字符串排序,然后返回字符串publicstaticStringsort(Strings){ char[]c=s.toCharArray();//将字符串转换成字符数组chartemp;for(inti=0;i<c.length-1;i++)//这里运用冒泡排序法for(intj=i+1;j<c.length;j++)if(c[i]>c[j]){temp=c[i];c[i]=c[j];c[j]=temp;}s=newString(c);//注意不能用c.toStringreturns;}publicstaticvoidmain(Stringargs[]){ Scannerin=newScanner(System.in); Strings=in.next();//从键盘输入一组字符 WriteToFile(s,"D:\\naruto.txt");//将字符串保存到D:\naruto.txt s=null;//将s清空,下面好读取,不然无法辨别s是读取到数据还是原来的数据s=ReadFromFile("D:\\naruto.txt");//从文件D:\naruto.txt读出字符串s=sort(s);//将s进行排序WriteToFile(s,"D:\\newnaruto.txt");//将排序后的内容保存到另一文件D:\newnaruto.txtSystem.out.println(s);}}运行结果:文件D:\\naruto.txt和D:\\newnaruto.txt中内容:8.创建一个学生类(包括姓名、年龄、班级、密码),创建若干该类的对象并保存在文件中(密码不保存),从文件读取对象后显示在屏幕上。//Student类importjava.io.Serializable;classStudentimplementsSerializable{ Stringname; intage; intgrade; transientStringsecret; publicStudent(Stringname,intage,intgrade,Stringsecret){ =name; this.age=age; this.grade=grade; this.secret=secret; } }//test6_8importjava.io.*;publicclasstset6_8{ publicstaticvoidmain(String[]args)throwsIOException,ClassNotFoundException{ Studentstudent[]={ newStudent("苍井空",19,101,"changjingkong"), newStudent("吉沢明",19,103,"jizeming"), newStudent("武藤兰",20,104,"wutenglan"), newStudent("我爱女优",21,105,"woainvyou")}; //创建输出 ObjectOutputStreamoos=newObjectOutputStream(newFileOutputStream("naruto.dat")); for(inti=0;i<student.length;i++) oos.writeObject(student[i]); oos.close(); //将对象数组student全部清空,后边你会明白的。 for(inti=0;i<student.length;i++) student[i]=null; //创建输入 ObjectInputStreamois=newObjectInputStream(newFileInputStream("naruto.dat")); for(inti=0;i<student.length;i++) student[i]=(Student)ois.readObject();//重新从文件中读入,之前的清空就因为此读入。注意,读入要强制转化为学生类 ois.close(); //显示信息 for(inti=0;i<student.length;i++){ if(i==student.length-1){ System.out.println("我的名字:"+student[i].name); System.out.println("我的年龄:"+student[i].age); System.out.println("我的班级:"+student[i].grade); System.out.println("我的密码:"+student[i].secret); System.out.println(); } else{ System.out.println("第"+(i+1)+"个女学生名字:"+student[i].name); System.out.println("第"+(i+1)+"个女学生年龄:"+student[i].age); System.out.println("第"+(i+1)+"个女学生班级:"+student[i].grade); System.out.println("第"+(i+1)+"个女学生密码:"+student[i].secret); System.out.println(); } } }}9.对例6—14中的压缩程序段进行修改,是压缩流经过缓冲类。比较两种方法在对大的文件进行压缩时的效率。//没经过缓冲类,使用FileInputStream类importjava.io.*;importjava.util.zip.*;publicclasstest6_9f{publicstaticvoidmain(String[]args)throwsIOException{ longtime=System.currentTimeMillis();FileInputStreamin=newFileInputStream("naruto.txt");GZIPOutputStreamout=newGZIPOutputStream(newFileOutputStream("test.gz"));System.out.println("Writingcompressingfilefromnaruto.txttotest.gz");intc;while((c=in.read())!=-1)out.write(c);//写压缩文件in.close();out.close();System.out.println("Readingfileformtest.gztomonitor");BufferedReaderin2=newBufferedReader(newInputStreamReader(newGZIPInputStream(newFileInputStream("test.gz"))));Strings;while((s=in2.readLine())!=null)System.out.println(s);in2.close();System.out.println("Writingdecompressiontonewnaruto.txt");GZIPInputStreamin3=newGZIPInputStream(newFileInputStream("test.gz"));FileOutputStreamout2=newFileOutputStream("newnaruto.txt");while((c=in3.read())!=-1)out2.write(c);in3.close();out2.close(); time=System.currentTimeMillis()-time;//时间差System.out.println("用时为:"+time+"微秒.");}}运行结果://压缩流经过缓冲类,使用BufferedInputStream类importjava.io.*;importjava.util.zip.*;publicclasstest6_9b{publicstaticvoidmain(String[]args)throwsIOException{BufferedInputStreamin=newBufferedInputStream(newFileInputStream("naruto.txt"));GZIPOutputStreamout=newGZIPOutputStream(newBufferedOutputStream( newFileOutputStream("test.gz")));System.out.println("Writingcompressingfilefromnaruto.txttotest.gz");intc;longtime=System.currentTimeMillis();//写压缩文件while((c=in.read())!=-1)out.write(c);in.close();out.close();//重新读出来System.out.println("Readingfileformtest.gztomonitor");BufferedReaderin2=newBufferedReader(newInputStreamReader(newGZIPInputStream(newFileInputStream("test.gz"))));Strings;while((s=in2.readLine())!=null)System.out.println(s);in2.close();//将压缩恢复System.out.println("Writingdecompressiontonewnaruto.txt");GZIPInputStreamin3=newGZIPInputStream(newFileInputStream("test.gz"));BufferedOutputStreamout2=newBufferedOutputStream( newFileOutputStream("newnaruto.txt"));while((c=in3.read())!=-1)out2.write(c);in3.close();out2.close(); time=System.currentTimeMillis()-time;//时间差System.out.println("用时为:"+time+"微秒.");}}运行结果:以上2个类的运行用时比较,可见对大文件进行压缩,经过缓冲流的效率要高得多。10.一家杂货店的店主,需要查询、输入、修改任何一件商品的品名、价格、库存量信息。请用随机存取文件满足其要求,可以更新、查询信息。每件商品的标志为其记录号。//商品Thing类publicclassThing{ charName[]=newchar[8];//16个字节 intNumber; //4个字节 doublePrice;//8个字节 intCount;//4个字节所以保存一个商品要32个字节 publicThing(Stringname,intnumber,doubleprice,intcount){ if(name.toCharArray().length>8) System.arraycopy(name.toCharArray(),0,this.Name,0,8);//如果字符长度大于8,只取前8个 else System.arraycopy(name.toCharArray(),0,this.Name,0,name.toCharArray().length);//如果字符长度小于8,有几个填几个 this.Number=number; this.Price=price; this.Count=count; } publicStringgetName(){ returnnewString(this.Name); } publicvoidsetName(Stringname){ if(name.toCharArray().length>8) System.arraycopy(name.toCharArray(),0,this.Name,0,8); else System.arraycopy(name.toCharArray(),0,this.Name,0,name.toCharArray().length); } publicdoublegetPrice(){ returnPrice; } publicvoidsetPrice(doubleprice){ this.Price=price; } publicintgetNumber(){ returnNumber; } publicvoidsetNumber(intnumber){ this.Number=number; } publicintgetCount(){ returnCount; } publicvoidsetCount(intcount){ this.Count=count; } }//操作Work类(包含输入、查询、更改操作)importjava.io.*;publicclassWork{ StringFileName; publicWork(StringFileName){ this.FileName=FileName; } //写第n条商品记录 publicvoidwriteThing(Thingth,intn)throwsException{ RandomAccessFilerafw=newRandomAccessFile(FileName,"rw"); rafw.seek(n*32);//将位置指示器移到指定位置上,每个商品占32个字节 for(inti=0;i<8;i++) rafw.writeChar(th.Name[i]);//写入商品名 rafw.writeInt(th.Number);//写入商品号码 rafw.writeDouble(th.Price);//写入价格 rafw.writeInt(th.Count);//写入商品库存量 rafw.close(); } //输入商品信息 publicvoidreadThing(intn)throwsException{ charthingname[]=newchar[8]; RandomAccessFilerafr=newRandomAccessFile(FileName,"r"); rafr.seek(n*32);//将位置指示器移到指定位置上,每个商品占32个字节 for(inti=0;i<8;i++) thingname[i]=rafr.readChar();//读到char商品名 System.out.print("商品名:"); System.out.println(thingname); System.out.println("编号:"+rafr.readInt()); System.out.println("价格:"+rafr.readDouble()); System.out.println("商品库存量:"+rafr.readInt()); rafr.close(); System.out.println(); } //修改存入n号商品名字 publicvoidsetThi
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年广东省江门市重点学校初一入学语文分班考试试题及答案
- 2022头皮美塑疗法技术操作规范专家共识解读
- 返岗人员安全教育培训课件
- 云南国防工业职业技术学院《软件实训(军工系统)》2024-2025 学年第一学期期末试卷(实践课)
- 达尔文英文介绍
- 2026高考历史总复习(通史版)第1讲 中华文明的起源与早期国家
- 辰州安全培训课件
- 车险综合改革培训课件
- 内蒙古乌兰察布市事业单位考录面试试题
- 煤矿地表塌陷治理方案
- 《念奴娇 赤壁怀古》《永遇乐 京口北固亭怀古》《声声慢》默写练习 统编版高中语文必修上册
- 妇产科病史采集临床思维
- 《半导体器件物理》复习题2012
- 众辰变频器z2400t-15gy-1说明书
- 非电量保护装置技术说明书
- 全国行政区划代码
- 新华书店先进事迹汇报
- 船体振动的衡准及减振方法
- 刑事侦查卷宗
- 水泥混凝土路面滑模摊铺机施工工法
- 儿童严重过敏反应急救演示文稿
评论
0/150
提交评论