高级Java实验一.docx

上传人:b****8 文档编号:10627577 上传时间:2023-02-22 格式:DOCX 页数:15 大小:337.12KB
下载 相关 举报
高级Java实验一.docx_第1页
第1页 / 共15页
高级Java实验一.docx_第2页
第2页 / 共15页
高级Java实验一.docx_第3页
第3页 / 共15页
高级Java实验一.docx_第4页
第4页 / 共15页
高级Java实验一.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

高级Java实验一.docx

《高级Java实验一.docx》由会员分享,可在线阅读,更多相关《高级Java实验一.docx(15页珍藏版)》请在冰豆网上搜索。

高级Java实验一.docx

高级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接口。

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

当前位置:首页 > 求职职场 > 简历

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1