`
eclipsesbs
  • 浏览: 20401 次
社区版块
存档分类
最新评论

第十天:Editor是怎么打开文件,保存文件的

阅读更多

作者:梁祺 (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的标题设置为文件名。

    public void init(IEditorSite site, IEditorInput editorInput)
            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()方法。

    public boolean isSaveAsAllowed() {
        return true;
    }

第二步,ItineraryEditor继承isDirty()方法,Eclipse会调用这个方法来知道打开的文件是否需要保存。 这里我们直接返回Itinerary的isDirty()方法(Itinerary维护一个boolean变量dirty, 任何修改Itinerary对象的方法都会将这个boolean变量设置为true)。

    public boolean isDirty() {
        return itinerary.isDirty();
    }

第三步,需要重载doSave(...)和doSaveAs()这两个方法,分别对应于File菜单里的Save和Save As这两个菜单。 当用户选择Save或Save As菜单时,会分别调用SaveAction或SaveAsAction,它们分别会调用Editor的 doSave(...)和doSaveAs()方法。我们重载doSave(...)方法, 将用户编辑过的Itinerary对象写入文件保存,然后发送PROP_DIRTY事件,通知EditorPart清除文件已修改标记。 另外,doSave(...)方法接受IProgressMonitor对象,当文件保存非常耗时的情况下, 就可以及时通知用户文件保存的状态。我们假设Itinerary的文件都很小,所以就忽略这个monitor了。

    public void doSave(IProgressMonitor monitor) {
        try {
            ItineraryWriter writer = new ItineraryWriter(itinerary);
            writer.write(file);
            firePropertyChange(PROP_DIRTY);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
    }

doSaveAs()方法,需要弹出文件保存对话框,提示用户输入新文件路径名,其他和doSave()类似。 两者代码由很多相似,实际开发时,应该考虑代码合并,这里为了示例清楚起见,就保留重复代码了。

    public void doSaveAs() {
        
        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还需要处理文件在打开或保存时可能发生的异常, 以便告诉用户发生的错误和需要采取的措施。这一点比较容易忽略,需要重视。

分享到:
评论

相关推荐

    app inventor资源包括:源码文件、扩展和使用app inventor开发的apk

    这些文件可以用 App Inventor 的在线编辑器打开,或者通过 App Inventor 的命令行工具进行处理。 2. **扩展** App Inventor 扩展(Extensions)是一种增强 App Inventor 功能的方法。它们允许开发者添加额外的硬件...

    Powerbuilder的富文本Rich控件 editor

    - 保存和加载RTF文件:将富文本内容保存为RTF格式,以便在其他支持RTF的应用程序中打开。 - 高级功能:如拼写检查、语法检查、自定义样式等,可以通过集成第三方库来实现。 为了实现这些功能,开发者需要掌握Power...

    Editor Console Pro U3D控制台插件.rar

    4. **日志保存与导出**:Editor Console Pro 可以保存当前的控制台日志,并将其导出为文本文件,便于后续分析或分享给团队成员。 5. **性能统计**:除了常规的日志输出,插件还提供性能统计信息,如帧率、内存使用...

    解决win7下msi文件无法安装、无法识别、无法打开

    在Windows 7操作系统中,有时会遇到MSI(Microsoft Installer)文件无法安装、无法识别或无法打开的问题。这个问题通常是由于Windows Installer服务发生故障或者系统设置被更改所导致的。以下是一份详细的解决步骤,...

    轻量级jQuery文本编辑器插件Froala WYSIWYG Editor

    10. **实时保存**:可以集成实时保存功能,防止用户意外丢失编辑的内容。 **使用步骤** 1. **引入依赖**:首先在HTML文件中引入jQuery库和Froala Editor的CSS及JavaScript文件。 2. **初始化编辑器**:通过...

    VI及VIM命令详解.docx

    10. 编辑多个文件 - `:n`:切换到下一个文件。 - `:rew`:重头开始编辑文件列表。 11. 其他命令 - `:map`:查看当前映射的键位。 - `:jumps`:查看跳转历史。 - `:marks`:查看标记。 - `:!command`:在shell...

    vi命令.DOC

    - `O`:只读方式打开文件,不更改文件内容。 - `E`:继续编辑文件,忽略`.swp`文件中的内容。 - `R`:恢复上次编辑后未保存的内容。 - `D`:删除`.swp`文件。 - `vi -r 文件名`:恢复未保存的内容。 #### 四、...

    Matlab入门例子和代码

    Editor:编写和保存M文件。 第3章:第一个Matlab程序 在Matlab的Editor中输入以下代码,保存为HelloWorld.m: % 这是一个注释 disp('Hello, World!'); 在Command Window中运行此脚本: >> HelloWorld 第4章:基本...

    PC-DMIS软件安装说明.doc

    第十步:导入联机文件 进入“开始”菜单——程 序——PC-DMIS for Windows——Settings Editor,导入联机文件。这个步骤非常重要,因为它将影响软件的使用。 第十一步:进入导入界面 进入导入界面,先点击“Clear...

    ACO_MiniEditor:ACO项目

    - **文件操作**:用户可以打开、保存和新建文件,支持常见的文本文件格式,如.txt。 - **样式设置**:可能包括字体选择、大小调整、颜色更改等。 - **撤销/重做**:提供对最近操作的撤销和重做功能。 - **多文档界面...

    net文件上传控件.zip

    然后,可以使用`SaveAs()`方法将文件保存到服务器的指定位置。 ```csharp [HttpPost] public ActionResult Upload(UploadModel model) { if (model.File != null && model.File.ContentLength > 0) { string ...

    鸟哥的_Linux_私房菜第10章-vim_程序编辑器

    ### 鸟哥的 Linux 私房菜:第10章—vim程序编辑器 #### vi与vim:为何要学习vim? 在 Linux 系统中,掌握文本编辑器的使用至关重要,尤其是对于系统管理员而言。在众多文本编辑器中,vi(以及其增强版本 vim)因其...

    linux下vi使用技巧大全

    在此模式下可以执行一些特殊的命令,比如保存文件、查找替换等。 #### 三、基本命令 1. **打开与编辑文件** - `:e filename`:打开或编辑一个文件。 - `:e! filename`:强制打开一个被其他程序占用的文件。 2....

    UNIX vi命令一览表

    8. warn: 未保存文件转到其他文件时给出提示 9. nomagic: 在搜索模式中不使用特殊字符前的反斜杠 10. nowrapscan: 禁止vi在搜索到文件两端时循环搜索 11. mesg: 允许vi显示其他用户通过write发送的信息 ### 最后行...

    openshot video editor sourcecode

    10. **项目文件格式**:OpenShot使用特定的项目文件格式保存用户的编辑设置和媒体文件引用,这涉及到序列化和反序列化的技术。 11. **导出与渲染**:最终视频的导出和渲染过程涉及视频编码和质量优化,OpenShot可能...

    vi的使用说明

    - `:10,100w /tmp/file` 只把第10行到第100行的内容保存到`/tmp/file` #### 七、多文件编辑 vi编辑器支持同时编辑多个文件,并在不同的文件间切换: - `:sp 新文件名` 分屏打开新文件 - `:vsp 新文件名` 垂直分屏...

    MicrosoftHTMLHelpWorkshopV1.3汉化版.rar

    将工程文件保存在某一目录下并给予文件名。此时弹出主编辑窗口,如图1。  2.单击右边的“选项”按钮,在弹出的对话框中我们可以设置文件的属性。包括文件标题、压缩率、排序、各种文件信息、搜索支持、宏定义、...

Global site tag (gtag.js) - Google Analytics