实验七:流与文件
指导老师:邱珊
一、实验目标
1. 理解数据流的概念
2. 理解Java流的层次结构 3. 理解文件的概念
二、实验要求
1. 掌握字节流的基本使用方法 2. 掌握字符流的基本使用方法 3. 能够创建、读写、更新文件
三、实验内容
在实验4中, 我们用Swing构建了一个菜单主页, 如下图所示。
在”文件”菜单中,当鼠标点击“新建”时,将构建并显示我们构造的“学生信息管理”窗口, 如下图所示。
1 武汉理工大学华夏学院
JAVA语言程序设计
在本次实验中,我们将对以上菜单项的功能进行扩展和进一步实现。 具体内容如下:
1) 在”学生信息管理”窗口底部中,增加一个”保存”按钮, 如下图所示, 该按钮的功能如下: 当填入学生信息之后, 点击”保存”, 该学生的信息将被保存到一个文本文件中(假设文件名为: studentinfo.txt), 如果保存成功,将弹出对话框,显示\"文件保存成功”, 否则,将弹出对话框,显示\"文件写入失败”,如图所示。
try{
//以覆盖方式创建文件输出流
2 武汉理工大学华夏学院
JAVA语言程序设计
FileOutputStream fout = new FileOutputStream(\"studentinfo.txt\"); DataOutputStream dout = new DataOutputStream(fout); dout.writeUTF(tID.getText()); //写入学号 dout.writeChar('\'); dout.writeUTF(tName.getText()); //写入姓名 dout.writeChar('\'); dout.writeUTF((String)cGender.getSelectedItem()); //写入性别 dout.writeChar('\'); dout.writeUTF(tAge.getText()); //写入年龄 dout.writeChar('\'); dout.writeUTF(tComputer_Score.getText()); //写入计算机成绩 dout.writeChar('\'); dout.writeUTF(tMath_Score.getText()); //写入数学成绩 dout.writeChar('\'); dout.writeUTF(tEnglish_Score.getText()); //写入英语成绩 dout.writeChar('\'); dout.writeUTF(tTotalScore.getText()); //写入总成绩 dout.writeChar('\'); dout.writeUTF(tAveScore.getText()); //写入平均成绩 dout.writeChar('\\n'); dout.close(); JOptionPane.showMessageDialog(null, \"文件保存成功\\"保存成功\ } catch (IOException ioe){ JOptionPane.showMessageDialog(null, \"文件写入失败\\"文件写入失败\ }
2) 关闭”学生信息管理窗口”
3) 在”文件”菜单中,当鼠标点击“打开”时,将出现文件对话框窗口, 从文件对话框中, 选择刚刚创建的 studentinfo.txt文件, 如下图所示。
3 武汉理工大学华夏学院
JAVA语言程序设计
然后点击”打开”按钮, 这时会再次出现”学生信息管理窗口”,并且窗口中自动填充我们刚刚输入的学生信息, 如图所示。
JFileChooser filedia = new JFileChooser(); filedia.setDialogTitle(\"打开文件\"); int result = filedia.showOpenDialog(this); // 打开\"打开文件\"对话框 if (result == JFileChooser.APPROVE_OPTION) { File file = filedia.getSelectedFile(); //根据选择的文件名创建一个File对象 String sID, sName, sGender, sAge, sComputer_Score, sEnglish_Score, sMath_Score,
4 武汉理工大学华夏学院
JAVA语言程序设计
sTotalScore, sAveScore; try{ //根据File对象创建数据输入流 FileInputStream fin = new FileInputStream(file); DataInputStream din = new DataInputStream(fin); //从基本数据输入流中读取内容,放入字符串变量中。 sID = din.readUTF(); din.readChar(); sName = din.readUTF(); din.readChar(); sGender = din.readUTF(); din.readChar(); sAge = din.readUTF(); din.readChar(); sComputer_Score = din.readUTF(); din.readChar(); sMath_Score = din.readUTF(); din.readChar(); sEnglish_Score = din.readUTF(); din.readChar(); sTotalScore = din.readUTF(); din.readChar(); sAveScore = din.readUTF(); din.readChar(); din.close(); //打开\"学生信息管理\"窗口 win = new JStudentWindow(); win.getContentPane().setLayout(new GridLayout(0,2)); win.getContentPane().setBackground(Color.yellow); win.setTitle(\"学生信息管理\"); win.pack(); win.setVisible(true); //将输入流中读取的内容填入各组件中 win.tID.setText(sID); win.tName.setText(sName); win.cGender.setSelectedItem(sGender); win.tAge.setText(sAge); win.tComputer_Score.setText(sComputer_Score); win.tMath_Score.setText(sMath_Score);
5 武汉理工大学华夏学院
JAVA语言程序设计
win.tEnglish_Score.setText(sEnglish_Score); win.tTotalScore.setText(sTotalScore); win.tAveScore.setText(sAveScore); //一个额外的例子 -在JAVA中调用非JAVA的外部命令 Runtime rt=Runtime.getRuntime(); String[] cmdArray = {\"NotePad.exe\ rt.exec(cmdArray); } catch (IOException ioe){ JOptionPane.showMessageDialog(null, \ }
6 文件读写错误\\"文件读取错误 武汉理工大学华夏学院
\"
因篇幅问题不能全部显示,请点此查看更多更全内容