java 输入输出流实验.docx_第1页
java 输入输出流实验.docx_第2页
java 输入输出流实验.docx_第3页
java 输入输出流实验.docx_第4页
java 输入输出流实验.docx_第5页
免费预览已结束,剩余3页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

欢迎光临电子商务知识百科数据挖掘/datamining/实验1 学读英文单词1. 相关知识点当程序需要读取磁盘上的数据或将程序中得到数据存储到磁盘时,就可以使用输入/输出流,简称I/O流。I/O流提供一条通道,用户可以通过该通道读取“源”中的数据或把数据传送到目的地。I/O流中的输入流的指向称作源,程序通过指向源的输入流读取源中的数据;输出流的指向称作目的地,程序通过指向目的地的输出流写入数据并把信息传递到目的地。FileReader类是Reader的子类,该类创建的对象称为文件字符输入流。文件字符输入流按字符读取文件中的数据。FileReader流按顺序读取文件,只要不关闭流,每次调用读取方法时FileReader流就会依次读取文件中其余的内容,直到文件的末尾或流被关闭。FileWriter类是Writer的子类,该类创建的对象称为文件字符输出流。文件字符输出流按字符将数据写入到文件中。FileWriter流按顺序写入数据,只要不关闭流,每次调用写入方法时FileWriter流就会依次向文件写入内容,直到流被关闭。FileInputStream是InputStream的子类,该类创建的对象称为文件字节输入流。文件字节输入流按字节读取文件中的数据。FileInputStream流按顺序读取文件,只要不关闭流,每次调用读取方法时就依次读取文件中其余的内容,直到文件的末尾或流被关闭。FileOutputStream类是OutputStream的子类,该类创建的对象称为文件字节输出流。文件字节输出流按字节将数据写入到文件中。FileOutputStream流按顺序写入数据,只要不关闭流,每次调用写入方法FileOutputStream流就会依次向文件写入内容,直到流被关闭。BufferedReader类创建的对象称为缓冲输入流,该输入流的指向必须是一个Reader流,称作BufferedReader流的底层流,底层流负责将数据读入缓冲区,BufferedReader流的源就是这个缓冲区,缓冲输入流再从缓冲区中读取数据。BufferedWriter类创建的对象称为缓冲输出流,缓冲输出流可以将BufferedWriter流和FileWriter流连接在一起,然后使用BufferedWriter流将数据写入缓冲区,FileWriter流作为BufferedWriter的底层流,负责将数据写入最终目的地。2. 实验目的掌握字符输入流和输出流的用法。3. 实验要求编写一个Java应用程序,其要求如下:(1)程序可以将一个由英文单词组成的文本文件读入到程序中。(2)单击“下一个单词”按钮可以在一个标签中显示程序读入的一个单词。(3)单击“发音”按钮可以听到标签上显示的单词的读音。(4)用户可以使用文本编辑器编辑程序中用到的三个由英文单词组成的文本文件:training1.txt、training2.txt和training3.txt,这些文本文件中的单词需要用空格、逗号或回车符分隔。(5)需要制作相应的声音文件,比如,training1.txt文件包含单词hello,那么在当前应用程序的运行目录中需要有hello.wav格式的声音文件。4. 程序效果示例5. 程序模板按模板要求,将【代码1】【代码5】替换为Java程序代码。模板1:StudyMainClass.javapublic class StudyMainClasspublic static void main(String args)new StudyFrame();模板2:EnglishWord.javaimport java.io.*;import java.util.StringTokenizer;public class EnglishWordpublic StringBuffer getEnglishWord(File file)StringBuffer englishWord=new StringBuffer();tryFileReader inOne=【代码1】/创建指向文件f的inOne的对象BufferedReader inTwo=【代码2】/创建指向文件inOne的inTwo的对象String s=null;int i=0;while(【代码3】)!=null) /inTwo读取一行englishWord.append( +s+ );catch(Exception e) return englishWord;模板3:StudyFrame.javaimport java.awt.*;import java.awt.event.*;import java.io.*;import javax.sound.sampled.*;import javax.swing.*;import java.util.regex.*;public class StudyFrame extends JFrame implements ItemListener,ActionListener,RunnableEnglishWord english;JComboBox choice;JButton getWord,voiceWord;JLabel showWord;String trainedWord=null;Clip clip=null;Tread voiceThread;int k=0;JPanel pCenter;CardLayout mycard;JTextArea textHelp;JMenuBar menubar;JMenu menu;JMenuItem help;Pattern p; /模式对象Matcher m; /匹配对象public StudyFrame()english=new EnglishWord();choice=new JComboBox();choice.addItem(*);choice.addItem(training1.txt);choice.addItem(training2.txt);choice.addItem(training3.txt);showWord=new JLabel(,JLabel.CENTER);showWord.setFont(new Font(宋体,Font.BOLD,24);showWord.setBackground(Color.green);getWord=new JButton(下一个单词);voiceWord=new JButton(发音);voiceThread=new Thread(this);choice.addItemListener(this);voiceWord.addActionListener(this);getWord.addActionListener(this);JPanel pNorth=new JPanel();pNorth.add(new JLabel(选择一个英文单词组成的文件);pNorth.add(choice);add(pNorth,BorderLayout.NORTH);JPanel pSouth=new JPanel();pSouth.add(getWord);pSouth.add(voiceWord);add(pNorth,BorderLayout.SOUTH);pCenter=new JPanel();mycard=new CardLayout();pCenter.setLayout(mycard);textHelp=new JTextArea();pCenter.add(word,showWord);pCenter.add(help,textHelp);add(pCenter,BorderLayout.CENTER);menubar=new JMenuBar();menu=new JMenu(帮助);help=new JMenuIter(关于学单词);help.addActionListener(this);menu.add(help);menubar.add(menu);setSize(350,220);setVisible(true);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);validate();String regex=s*a-zA-Z+s0,; /匹配单词的正则表达式p=Ppile(regex,Pattern.MULTILINE); /初始化模式对象public void itemStateChanged(ItemEvent e)String fileName=(String)choice.getSelectionItem();File file=new File(fileName);m=p.matcher(english.getEnglishWord(file);mycard.show(pCenter,word);public void actionPerformed(ActionEvent e)if(e.getSource()=getWord)boolean boo=m.find();if(boo)trainedWord=m.group();showWord.setText(trainedWord);elseshowWord.setText(训练完毕);if(e.getSource()=voiceWord)if(!(voiceThread.isAlive()voiceThread=new Thread(this);tryvoiceThread.start();catch(Exception exp)if(e.getSource()=help)mycard.show(pCenter,help);tryFile helpFile=new File(help.txt);FileReader inOne=【代码4】/创建指向文件helpFile的inOne的对象BufferedReader inTwo=【代码5】/创建指向文件inOne的inTwo的对象String s=null;while(s=inTwo.readLine()!=null)textHelp.append(s+n);inOne.close();inTwo.close();catch(IOException exp)public void run()voiceWord.setEnabled(false);tryif(clip!=null)clip.close();clip=AudioSystem.getClip();File voiceFile=new File(showWord.getText().trim()+.wav);clip.open(AudioSystem.getAudioInputStream(voiceFile);catch(Exception exp)clip.start();voiceWord.setEnabled(true);6. 实验指导(1)BufferedReader对象调用readLine方法可读取文件中的一行内容。(2)BufferedWriter对象调用newLine方法可向文件写入回行。(3)播放声音可以使用javax.sound.sampled包中的AudioSystem类,该类调用static方法public Clip getClip()可以返回一个Clip对象,AudioSystem类调用static方法getAudioInputStream(File file)可以返回一个指向文件的AudioInputStream音频流对象,Clip对象调用void open(AudioInputStream stream)可以打开参数stream指定的音频流。7. 实验后的练习参照本实验编写一个学读汉字的程序。实验2 克隆日期1. 相关知识点ObjectInputStream类和ObjectOutputStream类创建的对象分别被称为对象输入流和对象输出流。对象输出流可以将一个对象写入输出流并送往目的地,对象输入流可以从源中读取一个对象到程序中。当使用对象流写入或读入对象时,为了保证能把对象写入到文件,并正确读回到程序中,一定要保证对象时序列化的。一个类如果实现了Serializable接口,那么这个类创建的对象就是序列化的对象。Serializable接口中的方法对程序是不可见的,因此实现该接口的类不需要实现额外的方法。使用对象流很容易获取一个序列化对象。只需将该对象写入到对象输出流,然后用对象输入流读回的对象就是原对象的一个克隆。2. 实验目的掌握对象流的用法。3. 实验要求编写一个Java应用程序,将一个Calendar对象写入文件,然后按顺序读出该对象,并验证读出的对象是原始对象的克隆。4. 程序效果示例5. 程序模板按模板要求,将【代码1】【代码5】替换为Java程序代码。模板:ObjectExample.javaimport java.util.*;import java.io.*;public class ObjectExamplepublic static void main(String args)Calendar calendar=Calendar.getInstance();calendar.set(1949,9,1);tryFile f=new File(a.txt);FileOutputStream fileOut=new FileOutputStream(f);ObjectOutputStream objectOut=【代码1】/创建指向文件fileOut的对象输出流 【代码2】 /objectOut写对象calendar到文件 FileInputStream fileIn=new FileInputStream(f); ObjectInputStream objectIn=【代码3】/创建指向文件fileIn的对象输入流 Calendar cloneCalendar=【代码4】/objectIn读出对象【代码5】/cloneCalendar将时间设置为当前本地机器的时间 int 年=calendar.get(Calendar.YEAR), 月=calendar.get(Calendar.MONTH)+1, 日=calendar.get(Calendar.DAY_OF_MONTH); System.out.printf(calendar的日期:%d-%d-%d,年,月,日); 年=cloneCalendar.get(Calendar.YEAR); 月=cloneCalendar.get(Calendar.MONTH)+1; 日=cloneCalendar.get(calendar.DAY_OF_MONTH); System.out.printf(ncloneCalendar的日期:%d-%d-%d,年,月,日);catch(Exception event)System.out.println(event);6. 实验指导Java提供的绝大多数对象都是序列化的。一个类如果实现了Serializable接口,那么这个类创建的对象就是序列化的对象,如Calendar类就实现了Serializable接口。Serializable接口中的方法对程序是不可见的,因此实现该接口的类不需要实现额外的方法,当把一个序列化的对象写入到对象输出流时,JVM就会实现Serializable接口中的方法,并按一定格式的文本将对象写入到目的地。7. 实验后的练习编写一个Student类,将该类创建的若干个对象写入到文件,然后读出这些对象。实验3 读取ZIP文件1. 相关知识点ZIP文件是一种流行的档案文件,可以将若干个文件压缩到一个ZIP文件中。使用ZipInputStream类创建的输入流对象可以读取压缩到ZIP文件中的各个文件(即解压)。假设要解压一个名为book.zip的文件,首先使用ZipInputStream的构造方法public ZipInputStream(InputStream in)创建一个对象in,例如:ZipInputStream in=new ZipInputStream(new FileInputStream(“book.zip”);然后使用ZipInputStream对象in找到”book.zip”中的下一个文件,例如:ZipEntry zipEntry=in.getNextEntry();那么,in调用read方法就可以读取该文件。2. 实验目的掌握ZipInputStream流的使用3. 实验要求读取book.zip文件,并将book.zip文件中含有的文件重新存放到当前目录中的book文件夹中,即将book.zip文件的内容解压到book文件夹中。4. 程序效果示例程序运行效果5. 程序模板上机调试下列模板。模板:ReadZipFile.javaimport java.io.*;import java.util.zip.*;public class ReadZipFilepublic sta

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论