高级Java实验一.docx
- 文档编号:5284232
- 上传时间:2023-05-08
- 格式:DOCX
- 页数:15
- 大小:337.12KB
高级Java实验一.docx
《高级Java实验一.docx》由会员分享,可在线阅读,更多相关《高级Java实验一.docx(15页珍藏版)》请在冰点文库上搜索。
高级Java实验一
实验报告
课程名称高级Java程序设计
实验项目__流与文件
实验仪器个人计算机____
系别__计算机学院_
专业___
班级/学号
学生姓名_____________
实验日期2013年9月12日
成绩_______________________
指导教师______徐莉_________
实验项目一流与文件
实验目的:
1.了解流式输入输出的基本概念,掌握java输入输出处理的基本方法。
2.掌握文本文件、流文件的读入与写出。
3.学会编写通过GUI界面进行文件操作的应用程序。
实验内容:
任务1.调试、运行下列给出的程序,并做如下的探究。
classDemo1
{publicstaticvoidmain(String[]args)throwsjava.io.IOException
{bytebuffer[]=newbyte[20];
System.out.println("从键盘输入不超过20个字符,按回车键结束输入:
");
intcount=System.in.read(buffer);
System.out.println("保存在缓冲区buffer中元素的个数为:
"+count);
System.out.println("buffer中各元素的值为:
");
for(inti=0;i {System.out.print(""+buffer[i]); } System.out.println(); System.out.println("输出buffer字符元素: "); System.out.write(buffer,0,buffer.length); } } 探究的问题: 1.说出该程序的功能。 在屏幕上输出字符。 2.观察运行结果,提出你的探究问题,并回答。 字符读入的方式是什么? 答: 通过System.in.read(buffer)读取ASCII码。 实验总结: 这个java文件并没有说明输入的字符保存在哪里,而是默认到最初的java程序所在的路径。 任务2.调试、运行下列给出的程序,并做如下的探究。 importjava.io.*; classDemo2{ publicstaticvoidmain(String[]args)throwsIOException{ char[]cbuf1={‘你’,’好’,’! ’}; FileWriterfo=newFileWriter("txt1.txt"); fo.write(cbuf1); fo.close(); } } 探究的问题: 1.说出该程序的功能。 答: 创建一个字符数组,然后向txt1.txt中写入字符数组你好! 。 2.观察运行结果,你看到什么? 答: Text1.txt文件中出现“你好”两个字。 3.再次运行该程序,再打开txt1.txt看看,发生了什么? 并说明原因。 答: Txt1.txt内容没有改变。 再次执行把原来文件覆盖了。 这时候应该改为FileWriterfo=newFileWriter("txt1.txt,true")。 4.该程序如果缺少fo.close();语句会发生什么? 并说明原因。 答: Txt1.txt中没有任何字符。 Close相当于最后冲洗管道。 只有调用close才能让所有数据都出来。 5.该程序的main()方法如果缺少throwsIOException子句会发生什么? 答: 编译不能通过。 6.通过该任务,谈谈你对FileWriter的认识? 答: FileWirte是写入字符文件的便捷类。 7.现在你能设计一个能从键盘输入一行文本,然后将其保存到一磁盘文件里吗? 请试一试。 源程序: importjava.io.*; classshiyan3{ publicstaticvoidmain(String[]args)throwsIOException{ BufferedReaderin=newBufferedReader(newInputStreamReader(System.in)); System.out.println("请输入内容"); Stringstr=in.readLine(); FileWriterfo=newFileWriter("txt1.txt"); fo.write(str); fo.close(); } } 编译结果: 测试数据及运行结果: 实验总结: 文件的复制并没有因为文件类型的不同而出现复制错误的情况。 任务3.编写一个对二进制文件进行复制的程序。 源程序: importjava.io.*; publicclassFileCopy{ StringsourceName,destName; publicvoidcopy1(Stringsrc){ sourceName=src; opensourceFiles(); } publicvoidcopy2(Stringdst){ destName=dst; opendestFiles(); copyFiles(); } privatevoidopensourceFiles(){ Filen1=newFile(sourceName); if(! n1.exists()) {System.out.println("被复制文件不存在"+n1); System.exit(0);}} privatevoidopendestFiles(){ Filen2=newFile(destName); Fileparent=n2.getParentFile(); if(parent! =null&&! parent.exists()){ parent.mkdirs(); System.out.println("将创建目录"+n2); }} privatevoidcopyFiles(){ try{ Filen1=newFile(sourceName); FileInputStreamin=newFileInputStream(n1); byte[]c=newbyte[(int)n1.length()]; in.read(c); Filen2=newFile(destName); n2.createNewFile(); FileOutputStreamoutnew=newFileOutputStream(n2); outnew.write(c); in.close(); outnew.close(); } catch(IOExceptioniox){ System.out.println("Problemreadingorwriting"); } } publicstaticvoidmain(String[]args)throwsIOException{BufferedReaderin=newBufferedReader(newInputStreamReader(System.in)); System.out.println("请输入要复制的文件"); Stringa=in.readLine(); FileCopyfileCopy=newFileCopy(); fileCopy.copy1(a); System.out.println("请输入目的文件"); Stringb=in.readLine(); fileCopy.copy2(b); } } 测试数据及运行结果: 实验总结: 任务3的内容比较简单,主要是实现对文件的复制,在运行过程中没有出现什么问题。 任务4.创建一学生类(包含姓名、年龄、班级、密码),创建若干个该类的对象并保存在文件中(密码不保存),再从文件中读取对象后显示在屏幕上。 源程序: importjava.io.*; publicclassstudentjava { publicstaticvoidmain(Stringargs[])throwsIOException,ClassNotFoundException{ BufferedReaderin=newBufferedReader(newInputStreamReader(System.in)); System.out.println("请输入文件位置"); Stringa1=in.readLine(); System.out.println("请输入学生姓名"); Stringa2=in.readLine(); System.out.println("请输入学生年龄"); Stringa3=in.readLine(); inta6=Integer.parseInt(a3); System.out.println("请输入学生班级"); Stringa4=in.readLine(); System.out.println("请输入学生密码"); Stringa5=in.readLine(); studentbob=newstudent(a2,a6,a4,a5); FileOutputStreama=newFileOutputStream(a1); ObjectOutputStreamoos=newObjectOutputStream(a); oos.writeObject(bob); oos.close(); bob=null; FileInputStreamb=newFileInputStream(a1); ObjectInputStreamois=newObjectInputStream(b); bob=(student)ois.readObject(); ois.close(); System.out.println("------------------"); System.out.println("nameis: "+bob.getName()); System.out.println("ageis: "+bob.getAge()); System.out.println("classis: "+bob.getBanji()); System.out.println("passwordis: "+bob.getPass()); } } classstudentimplementsSerializable{ privateintage; privateStringname; privateStringbanji; transientprivateStringpassword; publicstudent(Stringnamea,intagea,Stringbanjia,Stringpassworda){ age=agea; name=namea; banji=banjia; password=passworda; } publicStringgetName() {returnname;} publicintgetAge() {returnage;} publicStringgetBanji() {returnbanji;} publicStringgetPass() {returnpassword;} } 测试数据及运行结果: 实验总结: 这个题目主要考查数据的存储和传输,里面用到了使用关键字transient可以阻止对象的某些成员被自动写入文件和Serializable接口,序列化是将对象状态转换为可保持或传输的格式的过程。 任务5.对例1-12中的压缩程序段进行修改,使压缩流经过缓冲类。 比较两种方法在对大的文件进行压缩时的效率。 //解压缩Zip文件,并恢复其原来路径 importjava.util.*; importjava.util.zip.*; importjava.lang.*; importjava.io.*; classUnzip{ bytedoc[]=null; StringFilename=null;//压缩文件名字符串 StringUnZipPath=null;//解压缩路径字符串 publicUnzip(Stringfilename,StringunZipPath){ this.Filename=filename; this.UnZipPath=unZipPath; this.setUnZipPath(this.UnZipPath); } publicUnzip(Stringfilename){ this.Filename=newString(filename); this.UnZipPath=null; this.setUnZipPath(this.UnZipPath); } privatevoidsetUnZipPath(StringunZipPath){ if(unZipPath.endsWith("\\")) this.UnZipPath=newString(unZipPath); else this.UnZipPath=newString(unZipPath+"\\"); } publicvoiddoUnZip(){ try{ ZipInputStreamzipis=newZipInputStream(newBufferedInputStream(newFileInputStream(Filename))); ZipEntryfEntry=null; while((fEntry=zipis.getNextEntry())! =null){ if(fEntry.isDirectory())//是路径则创建路径 checkFilePath(newString(UnZipPath+fEntry.getName()));//如果filename没有给出完整的路径那么就在解压路径下找这个文件 else{//是文件则解压缩文件 Stringfnamea=newString(UnZipPath+fEntry.getName()); try{Filefname=newFile(fnamea); BufferedOutputStreamout=newBufferedOutputStream(newFileOutputStream(fname)); fname.createNewFile(); doc=newbyte[512]; intn; while((n=zipis.read(doc,0,512))! =-1) out.write(doc,0,n); out.close(); out=null; doc=null; } catch(Exceptionex){} } } zipis.close(); } catch(IOExceptionioe){System.out.println(ioe);} } privatevoidcheckFilePath(StringdirName)throwsIOException{ Filedir=newFile(dirName); if(! dir.exists()) dir.mkdirs(); } //主类,用于输入参数,生成Unzip类的实例 //publicclassUnZipTester{ publicstaticvoidmain(String[]args)throwsException{ BufferedReaderin=newBufferedReader(newInputStreamReader(System.in)); System.out.println("请输入要解压的文件名"); Stringarg1=in.readLine(); System.out.println("请输入要解压的解压缩路径"); Stringarg2=in.readLine(); StringzipFile=arg1; StringunZipPath=newString(arg2+"\\"); UnzipmyZip=newUnzip(zipFile,unZipPath); myZip.doUnZip(); } } 测试数据: 测试一个word的压缩文件。 实验总结: 在解压的过程中,被压缩的文件名必须是英文字符或数字,不能出现汉字,否则压缩不成功。 思考题: 1.如果准备读取一个文件的内容,应该用FileInputStream流还是FileOutputStream流? 答: 用FileInputStream类。 2.字节流与字符流有什么区别? 编程时如何确定使用那种流合适? 答: 字节流以字节为单位,字符有可能占多个字节。 纯文本用字符比较合适,而其他情况用字节流合适,。 3.Java是怎样实现文件的随机读写? 答: 通过RandomAccessFile类 4.DataInputStream流能直接指向文件对象吗? 答: 能。 RandomAccessFile类,可跳转到文件的任意位置读/写数据,也可不破坏该文件的其他数据而在随机文件中插入数据,使用普通的读写方法实现了DataInput和DataOutput接口。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 高级 Java 实验