《输入输出流实验(共8页).doc》由会员分享,可在线阅读,更多相关《输入输出流实验(共8页).doc(8页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、精选优质文档-倾情为你奉上深 圳 大 学实 验 报 告课程名称: Java 实验序号: 上机实践9 实验名称: 统计英文单词&读取Zip文件 班 级: 计算机3 姓 名: 卢志敏 同 组 人: 实验日期: 2008 年 12 月 29 日 教师签字: 一、实验目的n 掌握RandomAccessFile类的使用。n 掌握ZipInputStream流的使用。二、实验环境JDK1.5WinXp SP 3三、 实验要求实验1n 使用RandomAccessFile流统计一篇英文中的单词,要求如下:(1) 一共出现了多少个英文单词。(2) 有多少个互不相同的单词。(3) 给出每个单词出现的频率,并将
2、这些单词按频率大小顺序显示在一个Text-Area中。实验2n 读取book.zip,并将book.zip中含有的文件重新存放到当前目录中的book文件夹中,即将book.zip的内容解压到book文件夹中。四、实验步骤和内容实验1源代码:WordStatistic.javaimport java.io.*;import java.util.Vector;public class WordStatisticVector allWords,noSameWord;WordStatistic()allWords=new Vector();noSameWord=new Vector();public
3、void wordStatistic(File file)try RandomAccessFile inOne=new RandomAccessFile(file,rw);/创建指向文件file的inOne的对象RandomAccessFile inTwo=new RandomAccessFile(file,rw);/创建指向文件file的inTwo的对象long wordStarPostion=0,wordEndPostion=0;long length=inOne.length();int flag=1;int c=-1;for (int k=0;k=length;k+)c=inOne.r
4、ead();/inOne调用read()方法boolean boo=(c=A)|(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;inTwo.seek(wordStarPostion);/inTwo调用seek方法将读写位置移动到wordStarPostionBytecc=newbyte
5、(int)wordEndPostion-(int)wordStarPostion;inTwo.readFully(cc);/inTwo调用readFully方法String word=new String(cc);allWords.add(word);if(!noSameWord.contains(word)noSameWord.add(word);flag=1;inOne.close();inTwo.close();catch(Exception e)public Vector getAllWords()return allWords;public Vector getNoSameWord(
6、)return noSameWord;StatisticFrame.javaimport java.awt.*;import java.awt.event.*;import java.util.Vector;import java.io.File;public class StatisticFrame extends Frame implements ActionListenerWordStatistic statistic;TextArea showMessage;Button openFile;FileDialog openFileDialog;Vector allWord,noSameW
7、ord;public StatisticFrame()statistic=new WordStatistic();showMessage=new TextArea();openFile=new Button(Open File);openFile.addActionListener(this);add(openFile,BorderLayout.NORTH);add(showMessage,BorderLayout.CENTER);openFileDialog=new FileDialog(this,打开文件对话框,FileDialog.LOAD);allWord=new Vector();n
8、oSameWord=new Vector();setSize(350,300);setVisible(true);addWindowListener(new WindowAdapter()public void windowClosing(WindowEvent e)System.exit(0););validate();public void actionPerformed(ActionEvent e)noSameWord.clear();allWord.clear();showMessage.setText(null);openFileDialog.setVisible(true);Str
9、ing fileName=openFileDialog.getFile();if(fileName!=null)statistic.wordStatistic(new File(fileName);allWord=statistic.getAllWords();noSameWord=statistic.getNoSameWord();showMessage.append(n+fileName+中有+allWord.size()+个英文单词);showMessage.append(n其中有+noSameWord.size()+个互不相同的英文单词);showMessage.append(n按使用
10、频率排列:n);int count=new intnoSameWord.size();for(int i=0;inoSameWord.size();i+)String s1=(String)noSameWord.elementAt(i);for(int j=0;jallWord.size();j+)String s2=(String)allWord.elementAt(j);if(s1.equals(s2)counti+;for(int m=0;mnoSameWord.size();m+)for(int n=m+1;ncountm)String temp=(String)noSameWord.
11、elementAt(m);noSameWord.setElementAt(String)noSameWord.elementAt(n),m);noSameWord.setElementAt(temp,n);int t=countm;countm=countn;countn=t;for(int m=0;mnoSameWord.size();m+)showMessage.append(n+(String)noSameWord.elementAt(m)+:+countm+/+allWord.size()+=+(1.0*countm)/allWord.size();StatisticMainClass
12、.javapublic class StatisticMainClasspublic static void main(String args)new StatisticFrame();实验2源代码ReadZipFile.javaimport java.io.*;import java.util.zip.*;public class ReadZipFilepublic static void main(String args)File f = new File(book.zip);File dir = new File(Book);byte b = new byte100;dir.mkdir(
13、);tryZipInputStream in = new ZipInputStream(new FileInputStream(f);ZipEntry zipEntry =null;while(zipEntry=in.getNextEntry()!=null)File file = new File(dir,zipEntry.getName();FileOutputStream out = new FileOutputStream(file);int n=-1;System.out.println(file.getAbsolutePath()+的内容);while(n=in.read(b,0,
14、100)!=-1) String str= new String(b,0,n);System.out.println(str);out.write(b,0,n); out.close(); in.close();catch(IOException ee)System.out.println(ee); 运行效果截屏:五、 实验后的练习在StatisticFrame的showMessage中增加单词按字典序排序输出的信息。解答:在StatisticFrame.java中加入如下代码:Vector sortWord=new Vecor(noSameWord);showMessage.append(n
15、按字典排序:n);for(int i=0;i(int)(String)sortWord.elementAt(i+1).charAt(0)/比较相邻两个单词首字母在字母表中的大小顺序tempStr=(String)sortWord.elementAt(i);sortWord.elementAt(i)=sortWord.elementAt(i+1);sortWord.elementAt(i+1)=tempStr;/如果前面的大于后面的则对调for(int k=0;ksortWord.size();k+)showMessage.append(n+(String)sortWord.elementAt(k);六、 心得体会1. RandomAccessFile类中的seek(long a)方法用来移动流的读写位置,getFilePointer()方法可以获取当前流的读写位置。2. Vector()对象可以使用add(Object o)方法把对象自动添加到向量末尾。 3. ZipInputStream流必须指向一个字节流的子类的实例。4. 使用ZipInputStream流之前要先使用getNextEntry()方法找到压缩文件中的下一个内容,然后开始读取。专心-专注-专业
限制150内