java实验8.docx
- 文档编号:8161258
- 上传时间:2023-01-29
- 格式:DOCX
- 页数:13
- 大小:18.61KB
java实验8.docx
《java实验8.docx》由会员分享,可在线阅读,更多相关《java实验8.docx(13页珍藏版)》请在冰豆网上搜索。
java实验8
教学日志
章节名称
实验2:
文件操作
学时数
4
授课时间
教学进度
学生考勤
应到:
实到:
请假:
旷课:
课程类型
理论课□讨论课□习题课□实验课□上机课█技能课□其他□
教学方法
多媒体+板书
目的要求
掌握掌握字符输入、输出流的用法;
掌握RandomAccessFile类的使用;
掌握ZipInputStream流的使用。
重点
难点
字符输入、输出流的用法。
RandomAccessFile类的使用
思考题
作业
撰写实验报告8
教学后记
作业批改及实验记录
说明:
1、每次授课前后,任课教师应及时填写。
2、授课时间:
指授课日期和节次;教学进度:
指是否符合教学进度简表
实验名称:
文件操作
实验目的:
1.掌握字符输入、输出流的用法;
2.掌握RandomAccessFile类的使用;
3.掌握ZipInputStream流的使用。
实验内容:
1、编写一个Java应用程序,要求如下:
可以将一个由汉字字符组成的文本文件读入到程序中。
单击名为“下一个汉字”的按钮,可以在一个标签中显示程序读入的一个汉字。
单击名为“发音”的按钮,可以听到标签上显示的汉字的拼音。
用户可以使用文本编辑器编辑程序中用到的3个由汉字字符组成的文本文件:
training1.txt、training2.txt和training3.txt,这些文本文件中的汉字需要用空格、逗号或回车分隔。
需要自己制作相应的声音文件,比如,training1.txt包含汉字“你”,那么在当前应用程序的运行目录中血药有“你.wav”格式的声音文件。
用户选择“帮助”菜单,可以查看软件的帮助信息。
程序模版
请按照模版要求,将【代码】替换为程序代码。
ChineseCharacters.java
importjava.io.*;
importjava.util.StringTokenizer;
publicclassChineseCharacters
{publicStringBuffergetChinesecharacters(Filefile)
{StringBufferhanzi=newStringBuffer();
try{FileReaderinOne=【代码1】//创建指向文件f的inOne的对象
BufferedReaderinTwo=【代码2】//创建指向文件inOne的inTwo的对象
Strings=null;
inti=0;
while((s=【代码3】)!
=null)//inTwo读取一行
{StringTokenizertokenizer=newStringTokenizer(s,",'\n'");
while(tokenizer.hasMoreTokens())
{hanzi.append(tokenizer.nextToken());
}
}
}
catch(Exceptione){}
returnhanzi;
}
}
StudyFrame.java
importjava.awt.*;
importjava.awt.event.*;
importjava.io.*;
importjavax.sound.sampled.*;
publicclassStudyFrameextendsFrameimplementsItemListener,ActionListener,Runnable
{ChineseCharacterschinese;
Choicechoice;
ButtongetCharacters,voiceCharacters;
LabelshowCharacters;
StringBuffertrainedChinese=null;
Clipclip=null;
ThreadvoiceThread;
intk=0;
PanelpCenter;
CardLayoutmycard;
TextAreatextHelp;
MenuBarmenubar;
Menumenu;
MenuItemhelp;
publicStudyFrame()
{chinese=newChineseCharacters();
choice=newChoice();
choice.add("training1.txt");
choice.add("training2.txt");
choice.add("training3.txt");
showCharacters=newLabel("",Label.CENTER);
showCharacters.setFont(newFont("宋体",Font.BOLD,72));
showCharacters.setBackground(Color.green);
getCharacters=newButton("下一个汉字");
voiceCharacters=newButton("发音");
voiceThread=newThread(this);
choice.addItemListener(this);
voiceCharacters.addActionListener(this);
getCharacters.addActionListener(this);
PanelpNorth=newPanel();
pNorth.add(newLabel("选择一个汉字字符组成的文件"));
pNorth.add(choice);
add(pNorth,BorderLayout.NORTH);
PanelpSouth=newPanel();
pSouth.add(getCharacters);
pSouth.add(voiceCharacters);
add(pSouth,BorderLayout.SOUTH);
pCenter=newPanel();
mycard=newCardLayout();
pCenter.setLayout(mycard);
textHelp=newTextArea();
pCenter.add("hanzi",showCharacters);
pCenter.add("help",textHelp);
add(pCenter,BorderLayout.CENTER);
menubar=newMenuBar();
menu=newMenu("帮助");
help=newMenuItem("关于学汉字");
help.addActionListener(this);
menu.add(help);
menubar.add(menu);
setMenuBar(menubar);
setSize(350,220);
setVisible(true);
addWindowListener(newWindowAdapter()
{publicvoidwindowClosing(WindowEvente)
{System.exit(0);
}
});
validate();
}
publicvoiditemStateChanged(ItemEvente)
{StringfileName=choice.getSelectedItem();
Filefile=newFile(fileName);
trainedChinese=chinese.getChinesecharacters(file);
k=0;
mycard.show(pCenter,"hanzi");
}
publicvoidactionPerformed(ActionEvente)
{if(e.getSource()==getCharacters)
{if(trainedChinese!
=null)
{charc=trainedChinese.charAt(k);
k++;
if(k>=trainedChinese.length())
k=0;
showCharacters.setText(""+c);
}
else
{showCharacters.setText("请选择一个汉字字符文件");
}
}
if(e.getSource()==voiceCharacters)
{if(!
(voiceThread.isAlive()))
{voiceThread=newThread(this);
}
try{voiceThread.start();
}
catch(Exceptionexp){}
}
if(e.getSource()==help)
{mycard.show(pCenter,"help");
try{FilehelpFile=newFile("help.txt");
FileReaderinOne=【代码4】//创建指向文件helpFile的inOne的对象
BufferedReaderinTwo=【代码5】//创建指向文件inOne的inTwo的对象
Strings=null;
while((s=inTwo.readLine())!
=null)
{textHelp.append(s+"\n");
}
inOne.close();
inTwo.close();
}
catch(IOExceptionexp){}
}
}
publicvoidrun()
{voiceCharacters.setEnabled(false);
try{if(clip!
=null)
{clip.close()
}
clip=AudioSystem.getClip();
FilevoiceFile=newFile(showCharacters.getText().trim()+".wav");
clip.open(AudioSystem.getAudioInputStream(voiceFile));
}
catch(Exceptionexp){}
clip.start();
voiceCharacters.setEnabled(true);
}
}
StudyMainClass.java
publicclassStudyMainClass
{publicstaticvoidmain(Stringargs[])
{newStudyFrame();
}
}
2、使用RandomAccessFile流统计一篇英文中的单词,要求如下:
一共出现了多少个单词
有多少个互不相同的单词
给出每个单词出现的频率,并将这些单词按频率大小顺序显示在一个TextArea中。
程序模版
请按照模版要求,将【代码】替换为程序代码。
WordStatistic.java
importjava.io.*;
importjava.util.Vector;
publicclassWordStatistic
{VectorallWorsd,noSameWord;
WordStatistic()
{allWorsd=newVector();
noSameWord=newVector();
}
publicvoidwordStatistic(Filefile)
{try{RandomAccessFileinOne=【代码1】//创建指向文件file的inOne的对象
RandomAccessFileinTwo=【代码2】//创建指向文件file的inTwo的对象
longwordStarPostion=0,wordEndPostion=0;
longlength=inOne.length();
intflag=1;
intc=-1;
for(intk=0;k<=length;k++)
{c=【代码3】//inOne调用read()方法
booleanboo=(c<='Z'&&c>='A')||(c<='z'&&c>='a');
if(boo)
{if(flag==1)
{wordStarPostion=inOne.getFilePointer()-1;
flag=0;
}
}
else
{if(flag==0)
{
if(c==-1)
wordEndPostion=inOne.getFilePointer();
else
wordEndPostion=inOne.getFilePointer()-1;
【代码4】//inTwo调用seek方法将读写位置移动到wordStarPostion
bytecc[]=newbyte[(int)wordEndPostion-(int)wordStarPostion];
【代码5】//inTwo调用readFully(bytea)方法,向a传递cc
Stringword=newString(cc);
allWorsd.add(word);
if(!
(noSameWord.contains(word)))
noSameWord.add(word);
}
flag=1;
}
}
inOne.close();
inTwo.close();
}
catch(Exceptione){}
}
publicVectorgetAllWorsd()
{returnallWorsd;
}
publicVectorgetNoSameWord()
{returnnoSameWord;
}
}
RandomExample.java
importjava.awt.*;
importjava.awt.event.*;
importjava.util.Vector;
importjava.io.File;
publicclassStatisticFrameextendsFrameimplementsActionListener
{WordStatisticstatistic;
TextAreashowMessage;
ButtonopenFile;
FileDialogopenFileDialog;
VectorallWord,noSameWord;
publicStatisticFrame()
{statistic=newWordStatistic();
showMessage=newTextArea();
openFile=newButton("OpenFile");
openFile.addActionListener(this);
add(openFile,BorderLayout.NORTH);
add(showMessage,BorderLayout.CENTER);
openFileDialog=newFileDialog(this,"打开文件话框",FileDialog.LOAD);
allWord=newVector();
noSameWord=newVector();
setSize(350,300);
setVisible(true);
addWindowListener(newWindowAdapter()
{publicvoidwindowClosing(WindowEvente)
{System.exit(0);
}
});
validate();
}
publicvoidactionPerformed(ActionEvente)
{noSameWord.clear();
allWord.clear();
showMessage.setText(null);
openFileDialog.setVisible(true);
StringfileName=openFileDialog.getFile();
if(fileName!
=null)
{statistic.wordStatistic(newFile(fileName));
allWord=statistic.getAllWorsd();
noSameWord=statistic.getNoSameWord();
showMessage.append("\n"+fileName+"中有"+allWord.size()+"个英文单词");
showMessage.append("\n其中有"+noSameWord.size()+"个互不相同英文单词");
showMessage.append("\n按使用频率排列:
\n");
intcount[]=newint[noSameWord.size()];
for(inti=0;i {Strings1=(String)noSameWord.elementAt(i); for(intj=0;j {Strings2=(String)allWord.elementAt(j); if(s1.equals(s2)) count[i]++; } } for(intm=0;m {for(intn=m+1;n {if(count[n]>count[m]) {Stringtemp=(String)noSameWord.elementAt(m); noSameWord.setElementAt((String)noSameWord.elementAt(n),m); noSameWord.setElementAt(temp,n); intt=count[m]; count[m]=count[n]; count[n]=t; } } } for(intm=0;m {showMessage.append("\n"+(String)noSameWord.elementAt(m)+ ": "+count[m]+"/"+allWord.size()+ "="+(1.0*count[m])/allWord.size()); } } } } RandomExample.java publicclassStatisticMainClass {publicstaticvoidmain(Stringargs[]) {newStatisticFrame(); } } 3、读取book.zip,并将book.zip中含有的文件重新存放到当前目录中的book文件夹中,并将book.zip的内容解压到book文件夹中。 程序模版 请上机调试下列模版 ReadZipFile.java importjava.io.*; importjava.util.zip.*; publicclassReadZipFile {publicstaticvoidmain(Stringargs[]) {Filef=newFile("book.zip"); Filedir=newFile("Book"); byteb[]=newbyte[100]; dir.mkdir(); try {ZipInputStreamin=newZipInputStream(newFileInputStream(f)); ZipEntryzipEntry=null; while((zipEntry=in.getNextEntry())! =null) {Filefile=newFile(dir,zipEntry.getName()); FileOutputStreamout=newFileOutputStream(file); intn=-1; System.out.println(file.getAbsolutePath()+"的内容: "); while((n=in.read(b,0,100))! =-1) {Stringstr=newString(b,0,n); System.out.println(str); out.write(b,0,n); } out.close(); } in.close(); } catch(IOExceptionee) { System.out.println(ee); } } }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- java 实验