JAVA异常处理及输入输出流技术实验Word文档下载推荐.docx
《JAVA异常处理及输入输出流技术实验Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《JAVA异常处理及输入输出流技术实验Word文档下载推荐.docx(21页珍藏版)》请在冰豆网上搜索。
对思考分析题能进行正确的实验验证,正确率70%以上。
对思考分析题有实验验证,正确率60%以下。
实验总结
(20)
对相关技术重点难点问题解决能够深刻领会,举一反三,感受真实。
对相关技术重点难点问题解决能够领会,感受真实。
对相关技术重点难点问题认识模糊,感受不真实。
报告格式
格式规范,组成部分完整,内容充实。
格式规范,组成部分完整。
格式不规范,组成部分不完整。
实验成绩
指导教师(签名)
年月日
说明:
指导教师评分后,实验报告交院(系)办公室保存。
实验项目二JAVA异常处理及输入输出流技术实验
文本编辑器
一、实验目的
1、理解和掌握字节流的类以及它们的使用特点;
2、理解和区分字节流和字符流;
3、了解和运用字节流和字符流进行文件复制;
4、理解和掌握JavaSwing组件的使用方法。
2、实验内容
设计一个简单的文本编辑器,可以实现多文件处理、实现文件的创建、浏览、编辑(允许文本复制、修改、删除)、对已经修改的文件进行保存或以另外文件名称保存。
三、实验原理
1、JavaSwing组件技术原理;
2、JavaAWT事件处理原理;
3、Java流技术原理。
四、实验环境
电脑主机酷睿i5、内存4G以上,操作系统Windows7以上,开发工具Myeclipse2015。
五、实验步骤
1、创建一个TextEditor项目。
图1创建一个TextEditor项目截图
2、创建一个TextEditor包
图2创建一个TextEditor包截图
3、创建一个TextEditor类
图3创建一个TextEditor类截图
4、填空空白代码,放入所在类进行点击调试并运行程序。
六、实验结果
图4运行结果
图5新建文件
图6保存文件
图7打开文件
图8输入
图9再次打开
图11缩小
图12打开
图13帮助
七、实验分析
7.1程序中SaveFileListener类和OtherSaveFileListener,他们都有处理保存文件的功能,但SaveFileListener对已经保存文件的会直接保存,而OtherSaveFileListener每次都会重新打开窗口保存文件,并要重新输入文件名。
7.2在OtherSaveFileListener类中的actionPerformed()方法中有语句:
output=newBufferedWriter(newFileWriter(fileName));
如果将该语句改写成:
output=new
BufferedWriter(new
FileWriter(filename,true));
程序是否可以正常运行,如果不能正常运行,但改为:
output=newBufferedWriter(newFileWriter(fileName,true));
可以正常运行,文件名错了。
new
FileWriter(fileName)在给出文件名的情况下构造一个FileWriter对象。
newFileWriter(fileName,true)在给出文件名的情况下构造FileWriter对象,它具有指示是否挂起写入数据的boolean值。
7.3在定义OtherSaveFileListener类的actionPerformed()方法中,采用了字符缓冲读写器(BufferedReader和BufferedWriter)来实现文件数据的读和写。
如果在该方法中改用字符缓冲输入和输出流BufferedInputstream和BufferedOutputstream来实现文件数据的读和写,语句可以为:
Input=newBufferedInPutstream(newFile(currentfile));
output=newBufferedoutPutstream(newFile(fileName));
7.4如果程序中没有定义BufferedReader和BufferedWriter
字符缓冲读写器,不可以通过FileReader和FileWriter文件读写器直接实现文件的读取和写入。
程序中字符缓冲读写器的作用是将外设送来的数据暂时以字符形式存放,以便处理器将它取走,提高程序的速度。
7.5程序开头的importjavax.swing.*;
importjava.awt.event.*;
importjavax.swing.event.*;
importjava.awt.*;
importjava.io.*;
importjavax.swing.text.Document;
即为导入对应的java包,其中*代表awt下的所有内容;
importjavax.swing.*;
是导入java界面类;
importjavax.swing.event.*;
为导入swing下event的全部内容;
importjava.awt.*;
导入旧的java界面类;
importjava.awt.event.*;
导入java的事件类;
importjavax.swing.text.Document;
表示导入swing下text内的document的内容。
八、实验结论
通过本实验,我对一个简单的文本编辑器实现,可以实现多文件处理、实现文件的创建、浏览、编辑(允许文本复制、修改、删除)、对已经修改的文件进行保存或以另外文件名称保存。
理解和掌握了字节流的类以及它们的使用特点、理解和区分字节流和字符流、了解和运用字节流和字符流进行文件复制。
字符流类字符流和字节流类字节流的区别。
更加深刻地认识到Java
语言中,对于文件内容的操作主要分为两大类,分别是:
字符流和字节流。
其中,字符流有两个抽象类:
Writer和Reader,其对应子类FileWriter和FileReader可实现文件的读写操作。
BufferedWriter和BufferedReader能够提供缓冲区功能,用以提高效率。
同样,字节流也有两个抽象类:
InputStream和OutputStream。
其对应子类有FileInputStream和FileOutputStream实现文件读写。
BufferedInputStream和BufferedOutputStream提供缓冲区功能。
抽象类java.io.Reader和java.io.Writer是基于字符的数据流的父类。
类Reader是输入字符流,Writer
是输出字符流,它们可以处理16位的字符。
它们的子类以及相应的继承关系根据功能可以分成两个类别:
一个是只处理读取和写入的类;
另一个是执行其他处理的类。
同样在Java语言中,字节流有两大基本类:
抽象类java.io.InputStream和java.io.OutputStream,它们是所有基于字节的数据流类的父类。
类InputStream是输入字节流,OutputStream
是输出字节流,它们则处理8位的字节数据。
一个是只处理读取和写入的类另一个是可以执行其他处理的类。
在这次实验中填写代码的过程中,经常会出现错误,原因是大小写软件不能识别。
比如:
output=newBufferedWriter(newFileWriter(filename,true));
这句就会报错。
但如果修改成为output=newBufferedWriter(newFileWriter(fileName,true));
就不会报错了,有时候良好的编写代码的习惯也可以避免浪费很多时间,我觉得这当中做浪费时间的就是不断地调试程序,修正代码。
在TextEditor类里输入代码,并补充填写代码1—7:
代码1:
result=filechooser.showOpenDialog(currentFrame);
//按照文件打开对话框模式选择文件
代码2:
result=filechooser.showSaveDialog(currentFrame);
//按照文件保存对话框模式选择文件
代码3:
FilefileName=filechooser.getSelectedFile();
//从对话框中选择文件,赋值给fileName;
代码4:
BufferedWriterinput=newBufferedWriter(newFileWriter(fileName));
//;
代码5:
BufferedReaderoutput=newBufferedReader(newFileReader(fileName));
代码6:
while((text=output.readLine())!
=null)//依次访问文件的每一行;
//
代码7:
output.close();
//关闭字符缓冲流output;
源程序:
packageTextEditor;
importjava.io.*;
publicclassTextEditorextendsJFrame{
JDesktopPanedesktopPane;
//定义菜单组件
JMenuBarmenuBar;
JMenufileMenu,helpMenu;
//定义文件菜单、帮助菜单
JMenuItemnewItem,openItem,saveItem,othersaveItem,closeItem,exitItem;
//定义文件菜单的:
新建菜单项、打开菜单项、保存菜单项、另存菜单项、关闭菜单项、//退出菜单项
JMenuItemaboutItem;
//定义帮助菜单的:
关于菜单项
StringBufferbuffer=newStringBuffer();
//定义一个字符串缓冲区;
FilecurrentFile;
//当前处理的文件;
intstatus;
//记录当前状态0:
新建、1:
打开、2:
保存、3:
另存;
4:
关闭;
DisplayFramecurrentFrame;
//当前打开的窗口
publicTextEditor(){
super("
文本编辑器"
);
Containercontainer=getContentPane();
desktopPane=newJDesktopPane();
container.add(desktopPane);
createMenu();
setJMenuBar(menuBar);
}
publicvoidcreateMenu(){
//定义菜单条;
menuBar=newJMenuBar();
//定义文件菜单
fileMenu=newJMenu("
文件"
新建菜单项、打开菜单项、保存菜单项、另存菜单项、关闭菜单
//退出菜单项
//定义新建菜单项
newItem=newJMenuItem("
新建"
newItem.addActionListener(newNewFileListener());
//定义打开菜单项
openItem=newJMenuItem("
打开"
openItem.addActionListener(newOpenFileListener());
saveItem=newJMenuItem("
保存"
saveItem.addActionListener(newSaveFileListener());
othersaveItem=newJMenuItem("
另存为"
othersaveItem.addActionListener(newOtherSaveFileListener());
closeItem=newJMenuItem("
关闭"
closeItem.addActionListener(newActionListener(){
publicvoidactionPerformed(ActionEvente){
if(e.getSource()==closeItem){
currentFrame.dispose();
});
exitItem=newJMenuItem("
退出"
exitItem.addActionListener(newActionListener(){
System.exit(0);
//添加菜单项到文件菜单中;
fileMenu.add(newItem);
fileMenu.add(openItem);
fileMenu.addSeparator();
fileMenu.add(saveItem);
fileMenu.add(othersaveItem);
fileMenu.add(closeItem);
fileMenu.add(exitItem);
//定义帮助菜单
helpMenu=newJMenu("
帮助"
aboutItem=newJMenuItem("
关于"
aboutItem.addActionListener(newActionListener(){
if(e.getSource()==aboutItem){
JOptionPane.showMessageDialog(null,"
TextEditor1.1"
"
版本"
JOptionPane.INFORMATION_MESSAGE);
//添加菜单项到帮助菜单中;
helpMenu.add(aboutItem);
//将文件菜单和帮助菜单加入到菜单条中;
menuBar.add(fileMenu);
menuBar.add(helpMenu);
}//endcreateMenumethod;
publicFilechooseFile(intchooseMode){
//从选择文件对话框中选择文件,chooseMode为选择模式
//1:
为文件打开对话框模式,2:
为文件保存对话框模式;
JFileChooserfilechooser=newJFileChooser();
filechooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
intresult=0;
switch(chooseMode){
case1:
result=filechooser.OPEN_DIALOG;
result=filechooser.showOpenDialog(this);
//按照文件打开对话框模式选择文件
break;
case2:
result=filechooser.SAVE_DIALOG;
result=filechooser.showSaveDialog(this);
//按照文件保存对话框模式选择文件
if(result==filechooser.CANCEL_OPTION)returnnull;
//从对话框中选择文件,赋值给fileName;
returnfileName;
//返回选定的文件;
publicvoidsaveFile(Filefile,intsaveMode)throwsIOException{
//保存文件fileName,saveMode是保存文件模式:
新建文件的保存;
2:
将修改的已有文件保存;
FilefileName=null;
switch(saveMode){
case0:
fileName=chooseFile
(2);
if(fileName.createNewFile()!
=true)return;
fileName=file;
default:
return;
currentFile=fileName;
if(fileName.exists()!
//文件不存在,则返回;
BufferedWriterinput=
newBufferedWriter(newOutputStreamWriter(newFileOutputStream(fileName)));
//将文件fileName写入到字符缓冲写入器input中;
input.write(buffer.toString(),0,buffer.length()-1);
//将buffer字符串写入到字符缓冲写入器input中
System.err.println(buffer.length());
if(input!
=null)
input.close();
status=1;
publicvoidshowFile(FilefileName,DisplayFramecontentFrame){
//将指定文件fileName的内容在窗口contentFrame内显示出来。
try{
//将文件fileName读到字符缓冲读取器output中;
Stringtext;
buffer=newStringBuffer();
buffer.append(text+"
\n"
//将每一行添加到buffer中;
contentFrame.displayArea.setText(buffer.toString());
//将buffer的字符串在contentFrame窗口中显示出来;
contentFrame.setTitle(fileName.getName());
//改变窗口的标题;
//关闭字符缓冲流output;
catch(IOExceptionex){
错误发生!
catch(NullPointerExceptionex3){
警告!
publicstaticvoidmain(String[]args){
TextEditortexteditor=newTextEditor();
texteditor.setSize(400,300);
texteditor.setVisible(true);
texteditor.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}//endmain
classNewFileListenerimplementsActionListener{
publicvoidactionPerformed(ActionEvente){//新建
DisplayFrametxtFrame=newDisplayFrame();
currentFrame=txtFrame;
txtFrame.setTitle("
新建文件"
desktopPane.add(txtFrame);
status=0;
}//endclassnewFileListener;
classOpenFileListenerimplementsActionListener{
publicvoidactionPerformed(ActionEvente){//打开文件监视接口;
FilefileName=chooseFile
(1);
//打开模式打开文件;
if(fileName.exists()){
DisplayFramecontentFrame=newDisplayFrame();
currentFrame=contentFrame;
desktopPane.add(contentFrame);
showFile(fileName,contentFrame);
}//endif
}catch(Exceptionex){}
}//endactionPerformed
}//endclassopenFileListener;
classSaveFileListenerimplementsActionListener{
publicvoidactionPerformed(ActionEvente){//保存处理
if(e.getSource()==saveItem){
try{
saveFile(currentFile,status);
catch(IOExceptionex){
JOptionPane.showMessageDialog(null,"
保存文件失败!
!
catch(Exceptionex){}
}//endclas