java 输入输出流实验

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验1学读英文单词
1.相关知识点
当程序需要读取磁盘上的数据或将程序中得到数据存储到磁盘时,就可以使用输入/输出流,简称I/O流。I/O流提供一条通道,用户可以通过该通道读取“源”中的数据或把数据传送到目的地。I/O流中的输入流的指向称作源,程序通过指向源的输入流读取源中的数据;输出流的指向称作目的地,程序通过指向目的地的输出流写入数据并把信息传递到目的地。
String s=null;
int i=0;
while((【代码3】)!=null)//inTwo读取一行
{
englishWord.append(" "+s+" ");
}
}
catch(Exception e) {}
return englishWord;
}
}模板3:StudyFrame.java
import java.awt.*;
public StringBuffer getEnglishWord(File file){
StringBuffer englishWord=new StringBuffer();
try{
FileReader inOne=【代码1】//创建指向文件f的inOne的对象
BufferedReader inTwo=【代码2】//创建指向文件inOne的inTwo的对象
BufferedReader类创建的对象称为缓冲输入流,该输入流的指向必须是一个Reader流,称作BufferedReader流的底层流,底层流负责将数据读入缓冲区,BufferedReader流的源就是这个缓冲区,缓冲输入流再从缓冲区中读取数据。
BufferedWriter类创建的对象称为缓冲输出流,缓冲输出流可以将BufferedWriter流和FileWriter流连接在一起,然后使用BufferedWriter流将数据写入缓冲区,FileWriter流作为BufferedWriter的底层流,负责将数据写入最终目的地。
}
try{
voiceThread.start();
}
catch(Exception exp){}
}
if(e.getSource()==help)
{
mycard.show(pCenter,"help");
try{
File helpFile=new File("help.txt");
FileReader inOne=【代码4】//创建指向文件helpFile的inOne的对象
pCenter=new JPanel();
mycard=new CardLayout();
pCenter.setLayout(mycard);
textHelp=new JTextArea();
pCenter.add("word",showWord);
pCenter.add("help",textHelp);
CardLayout mycard;
JTextArea textHelp;
JMenuBar menubar;
JMenu menu;
JMenuItem help;
Pattern p;//模式对象
Matcher m;//匹配对象
public StudyFrame()
{
english=new EnglishWord();
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,Runnable{
(5)需要制作相应的声音文件,比如,training1.txt文件包含单词hello,那么在当前应用程序的运行目录中需要有hello.wav格式的声音文件。
4.程序效果示例
5.程序模板
按模板要求,将【代码1】~【代码5】替换为Java程序代码。
模板1:StudyMainClass.java
public class StudyMainClass{
(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指定的音频流。
choice.addItemListener(this);
voiceWord.addActionListener(this);
getWord.addActionListener(this);
JPanel pNorth=new JPanel();
pNorth.add(new JLabel("选择一个英文单词组成的文件"));
clip.open(AudioSystem.getAudioInputStream(voiceFile));
}
catch(Exception exp){}
clip.start();
voiceWord.setEnabled(true);
}
}6.实验指导
(1)BufferedReader对象调用readLine方法可读取文件中的一行内容。
}
public void itemStateChanged(ItemEvent e)
{
String fileName=(String)choice.getSelectionItem();
File file=new File(fileName);
m=p.matcher(english.getEnglishWord(file));
EnglishWord english;
JComboBox choice;
JButton getWord,voiceWord;
JLabel showWord;
String trainedWord=null;
Clip clip=null;
Tread voiceThread;
int k=0;
JPanel pCenter;
pNorth.add(choice);
add(pNorth,BorderLayout.NORTH);
JPanel pSouth=new JPanel();
pSouth.add(getWord);
pSouth.add(voiceWord);
add(pNorth,BorderLayout.SOUTH);
showWord.setFont(new Font("宋体",Font.BOLD,24));
showWord.setBackground(Color.green);
getWord=new JButton("下一个单词");
voiceWord=new JButton("发音");
voiceThread=new Thread(this);
mycard.show(pCenter,"word");
}
public void actionPerformed(ActionEvent e)
{
if(e.getSource()==getWord)
{
boolean boo=m.find();
if(boo)
{
trainedWord=m.group();
2.实验目的
掌握字符输入流和输出流的用法。
3.实验要求
编写一个Java应用程序,其要求如下:
(1)程序可以将一个由英文单词组成的文本文件读入到程序中。
(2)单击“下一个单词”按钮可以在一个标签中显示程序读入的一个单词。
(3)单击“发音”按钮可以听到标签上显示的单词的读音。
(4)用户可以使用文本编辑器编辑程序中用到的三个由英文单词组成的文本文件:training1.txt、training2.txt和training3.txt,这些文本文件中的单词需要用空格、逗号或回车符分隔。
public static void main(String args[]){
new StudyFrame();
}
}
模板2:EnglishWord.java
import java.io.*;
import java.util.StringTokenizer;
public class EnglishWord{
FileReader类是Reader的子类,该类创建的对象称为文件字符输入流。文件字符输入流按字符读取文件中的数据。FileReader流按顺序读取文件,只要不关闭流,每次调用读取方法时FileReader流就会依次读取文件中其余的内容,直到文件的末尾或流被关闭。
FileWriter类是Writer的子类,该类创建的对象称为文件字符输出流。文件字符输出流按字符将数据写入到文件中。FileWriter流按顺序写入数据,只要不关闭流,每次调用写入方法时FileWriter流就会依次向文件写入内容,直到流被关闭。
catch(IOException exp){}
}
}
public void run()
{
voiceWord.setEnabled(false);
try{
if(clip!=null)
{
clip.close();
}
clip=AudioSystem.getClip();
File voiceFile=new File(showWord.getText().trim()+".wav");
FileInputStream是InputStream的子类,该类创建的对象称为文件字节输入流。文件字节输入流按字节读取文件中的数据。FileInputStream流按顺序读取文件,只要不关闭流,每次调用读取方法时就依次读取文件中其余的内容,直到文件的末尾或流被关闭。
FileOutputStream类是OutputStream的子类,该类创建的对象称为文件字节输出流。文件字节输出流按字节将数据写入到文件中。FileOutputStream流按顺序写入数据,只要不关闭流,每次调用写入方法FileOutputStream流就会依次向文件写入内容,直到流被关闭。
add(pCenter,BorderLayout.CENTER);
menubar=new JMenuBar();
menu=new JMenu("帮助");
help=new JMenuIter("关于学单词");
help.addActionListener(this);
menu.add(help);
menubar.add(menu);
BufferedReader inTwo=【代码5】//创建指向文件inOne的inTwo的对象
String s=null;
while((s=inTwo.readLine())!=null)
{
textHelp.append(s+"\n");
}
Fra Baidu bibliotekinOne.close();
inTwo.close();
}
setSize(350,220);
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
validate();
String regex="\\s*[a-zA-Z]+\\s{0,}";//匹配单词的正则表达式
p=Pattern.compile(regex,Pattern.MULTILINE);//初始化模式对象
choice=new JComboBox();
choice.addItem("***");
choice.addItem("training1.txt");
choice.addItem("training2.txt");
choice.addItem("training3.txt");
showWord=new JLabel("",JLabel.CENTER);
showWord.setText(trainedWord);
}
else
{
showWord.setText("训练完毕");
}
}
if(e.getSource()==voiceWord)
{
if(!(voiceThread.isAlive()))
{
voiceThread=new Thread(this);
相关文档
最新文档