作者:梁祺 (eclipsesbs@gmail.com)
来自:http://www.benisoft.net/day10/index.html
在Itinerary的例子里,所以行程计划都保存在后缀为.iti的XML文件中。用户打开.iti文件, 编辑后可以选择保存,或者另存为新的文件。今天就来看一下整个过程。
打开文件
前面我们介绍过,Eclipse通过文件后缀名来决定该文件该用哪个Editor打开,在实现org.eclipse.ui.editors 扩展点时,指定extensions为iti,这样,Eclipse碰到以.iti为文件后缀的文件,就会调用ItineraryEditor打开。
Eclipse首先调用ItineraryEditor.init(...)方法。这个方法的实现一般都会调用基类的init(...)方法 来保存site和editorInput。site是Eclipse提供的IEditorSite对象,通过这个对象, Editor可以获得Eclipse窗口的一些功能,比如工具栏。 接下来,检查editorInput类型。Eclipse对于导入到Eclipse项目(或者说由Eclipse管理的文件), 和未导入到Eclipse项目的(也就是说直接在文件系统上,没有纳入Eclipse管理的文件)是区别对待的。 它们所对应的IEditorInput是不同的,这个我们会在介绍Resource的时候专门讨论。 因为Itinerary例子不需要将文件导入到Eclipse项目中,可以直接打开文件系统上的文件, 所以我们检查editorInput是否是FileStoreEditorInput实例。请记住,非Eclipse管理的文件所对应的 IEditorInput是FileStoreEditorInput。然后生成一个ItineraryParser对象, 从FileStoreEditorInput获取File对象,并交由parser打开,最后将Editor的标题设置为文件名。
throws PartInitException {
super.init(site, editorInput);
if (editorInput instanceof FileStoreEditorInput) {
FileStoreEditorInput pathEditorInput = (FileStoreEditorInput) editorInput;
ItineraryParser parser = new ItineraryParser();
try {
file = new File(pathEditorInput.getURI().toURL().getFile());
itinerary = parser.parse(file);
setPartName(file.getName());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
到这里为止,ItineraryEditor成功打开.iti文件。接下来看一下如何保存文件。
保存文件
说起来也很简单,两大部分。首先需要告诉Eclipse,打开的文件用户已经编辑过了,需要保存, 其次就是调用方法将Itinerary内容写入iti文件。
第一步,如果需要支持Save As,则ItineraryEditor继承isSaveAsAllowed()方法。
第二步,ItineraryEditor继承isDirty()方法,Eclipse会调用这个方法来知道打开的文件是否需要保存。 这里我们直接返回Itinerary的isDirty()方法(Itinerary维护一个boolean变量dirty, 任何修改Itinerary对象的方法都会将这个boolean变量设置为true)。
第三步,需要重载doSave(...)和doSaveAs()这两个方法,分别对应于File菜单里的Save和Save As这两个菜单。 当用户选择Save或Save As菜单时,会分别调用SaveAction或SaveAsAction,它们分别会调用Editor的 doSave(...)和doSaveAs()方法。我们重载doSave(...)方法, 将用户编辑过的Itinerary对象写入文件保存,然后发送PROP_DIRTY事件,通知EditorPart清除文件已修改标记。 另外,doSave(...)方法接受IProgressMonitor对象,当文件保存非常耗时的情况下, 就可以及时通知用户文件保存的状态。我们假设Itinerary的文件都很小,所以就忽略这个monitor了。
try {
ItineraryWriter writer = new ItineraryWriter(itinerary);
writer.write(file);
firePropertyChange(PROP_DIRTY);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
doSaveAs()方法,需要弹出文件保存对话框,提示用户输入新文件路径名,其他和doSave()类似。 两者代码由很多相似,实际开发时,应该考虑代码合并,这里为了示例清楚起见,就保留重复代码了。
FileDialog fileDialog = new FileDialog(getSite().getShell(), SWT.SAVE);
fileDialog.setFileName(\"myitinerary.iti\");
fileDialog.setFilterExtensions(new String[] { \"iti\", \"*\" });
fileDialog.setFilterIndex(0);
fileDialog.setFilterNames(new String[] { \"Itinerary Files (*.iti)\",
\"All Files (*.*)\" });
fileDialog.setText(\"Save File\");
fileDialog.setOverwrite(true);
String filePath = fileDialog.open();
if (filePath != null) {
try {
ItineraryWriter writer = new ItineraryWriter(itinerary);
File file = new File(filePath);
writer.write(file);
PathEditorInput input = new PathEditorInput(file);
setInput(input);
firePropertyChange(PROP_DIRTY);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
}
到这里,我们介绍了文件打开和保存所涉及的基本步骤,一个设计良好的plug-in还需要处理文件在打开或保存时可能发生的异常, 以便告诉用户发生的错误和需要采取的措施。这一点比较容易忽略,需要重视。
相关推荐
ASD:Microsoft Word的自动保存文件;Microsoft高级流媒体格式(microsoft advanced streaming format,ASF)的描述文件;可用NSREX打开 Velvet Studio例子文件 ASF:Microsoft高级流媒体格式文件 ASM:汇编语言...
将工程文件保存在某一目录下并给予文件名。此时弹出主编辑窗口,如图1。 2.单击右边的“选项”按钮,在弹出的对话框中我们可以设置文件的属性。包括文件标题、压缩率、排序、各种文件信息、搜索支持、宏定义、...
- 标签关闭提示:检测是否有未保存文件,文件修改实时修改是否修修改的按钮状态 ####fix bug:(bug解决和程序优化) - 文本文件编辑 文件名含有url编码则出错bug - 右键菜单在最下面时,右键位置重叠导致点击...
找到mingwm10.dll 文件,将其复制到C:\WINDOWS\system 文件夹下,即可。下 面再提示缺少什么dll 文件,都像这样解决就可以了。 二、Qt Creator 编写多窗口程序(原创) 实现功能: 程序开始出现一个对话框,按下按钮...
#新建工程第一步操作 1. module设置把空包分层去掉,compact empty middle package 2. 设置当前的工程是utf-8,设置的Editor-->File Encodings-->全部改成utf-8, #注释 1. ctrl+/:单行注释 #光标操作 1. ...
固定组件面板错误,在执行基于文件的库搜索后无法重新打开所选组件类别。 进口商/出口商 17619 修复了导致P-CAD导入导出错误和PCAD16LD.DLL访问冲突的错误。 24746 修复了导入xDxDesigner项目时未正确转换总线的...
Java生成密钥、保存密钥的实例源码,通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何用Java对象序列化保存私钥...
备注:如需修改上传图片、视频、文件等保存路径,请打开includes/ueditor/php/config.json修改即可,默认保存路径是/images/upload/,可以修改为你想要的路径,的人也可以不用改。 2、把admin/js/jquery.js,...
和前面第一步中的方法基本一样,不过这里我们需要用到unix中的find等命令来查找当前目录下的C和C++文件,然后再将它们送给lint程序处理,所以得先从http://www.weihenstephan.de/~syring/win32/UnxUtils.zip下载...
Ghost 还提供了一项硬盘备份功能,就是将整个硬盘的数据备份成一个文件保存在硬盘上(菜单 Local→Disk→To Image),然后就可以随时还原到其他硬盘或源硬盘上,这对安装多个系统很方便。使用方法与分区备份相似。...
Ghost 还提供了一项硬盘备份功能,就是将整个硬盘的数据备份成一个文件保存在硬盘上(菜单 Local→Disk→To Image),然后就可以随时还原到其他硬盘或源硬盘上,这对安装多个系统很方便。使用方法与分区备份相似。...
4、如果是多工作表的EXCEL文件的话,要先用excel打开文件,然后把下面的工作表全选中,保存一下,再上传,不然只能转换一页。 5、本控件针对会员中心的添加文章的时候也给出了生成Flash的选项。只是还需要修改动易的...
第10章 使用标尺、网格和辅助线 10.1 设置标尺 10.1.1 选择度量单位 10.1.2 应用各种单位 10.1.3 放置标尺零点 IO.2 使用网格 10.2.1 设置网格间距 10.2.2 设置网格线的最小间距 10.2.3 设置...
在做外联如EXCEL等的时候对数据有一些要求,确保第一行包含字段名,这些字段名不能超过十个字母,不能出现特殊字符。最好把EXCEL保存为.csv文件去除一些不兼容的内容再连接。 转载ESRI论坛Lucy1114帖子说明: 12...
Java生成密钥、保存密钥的实例源码,通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何用Java对象序列化保存私钥...
第10章 使用标尺、网格和辅助线 10.1 设置标尺 10.1.1 选择度量单位 10.1.2 应用各种单位 10.1.3 放置标尺零点 IO.2 使用网格 10.2.1 设置网格间距 10.2.2 设置网格线的最小间距 ...
10. 方便的同时打开多个存储过程,通过页面快速切换 11. 快速编译存储过程,快速定位错误所在,自己选择是否同时编译依赖的存储过程 12. 内置对PL/Formatter,可以用PL/Formatter对存储过程进行格式化,并且可以...
FLAC3D5全文共130页,当前为第10页。 1.1.3 the menus FLAC3D5全文共130页,当前为第11页。 Options Dialog: General: Destroy Button, System Title Colors Editor: Font, Colors, Highlighting, New File Header ...
(保存为reg文件,导入) 4、如果不想通过注册表,而在文件中强制定义码表目录: 第一步:0x023C58:EB 00 改为 EB 66 第二步:0x0241D0:Unicode码的C:\Temp 改为自设目录,最长24个字符 20061205新性: * 更正有...