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

Windows环境变量管理工具:PathEditor2使用指南 PathEditor2的主窗口分为几个主要部分:主菜单、工具栏、变量列表和状态栏。主菜单:位于窗口的最上方,提供对所有功能的访问入口,包括文件、编辑、查看、帮助等菜单项。工具栏:显示了一系列常用功能的快捷按钮,如添加、编辑、删除、刷新等。变量列表:显示了所有现有的环境变量及其值。通过它,用户可以直观地看到每一个变量的详细信息。状态栏:位于窗口的最底部,显示当前状态信息,例如当前选中的环境变量和相关的操作提示。 阅读详情

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

PathEditor环境变量编辑器 用来编辑环境变量,非常方便使用。 不需要在高级属性的环境变量中选择Path变量进行路径添加。 可视化很好 立即下载

相关推荐

Path Editor

Path Editor windows environment

windows工具:环境变量编辑器PathEditor2

老是要到属性里改变环境变量,一步步的好麻烦,找了个环境变量编辑器, http://www.softpedia.com/get/System/System-Miscellaneous/Path-Editor.shtml 如果嫌网络慢,我做了个链接,可以去这里下载 https://download.youkuaiyun.com/download/tanmx219/10585124 本来想设置成0个下载券,...

tanmx219的博客 3826

GoogleEarth PathEditor

相信网优朋友们可能会用到,自己制作Google地球基站图层的小工具,可在Google地球上显示基站位置,扇区朝向等。

打开Editor的几种方式

当我们在知道文件位置的时候. 没有明确Input的时候. 我们可以获取IFile对象来打开Editor.  但是想要获取的文件必须在项目里面, 这样才能获取IFile对象 //获取工作控件, 获取根, 获取项目. IProject porject = ResourcesPlugin.getWorkspace().getRoot().getProjects()[0]; //因为我只有一个项

BrandoLv 2678

patheditor 制作googleearth kml文件工具软件

patheditor 制作googleearth kml文件工具软件

kml文件的制作工具小软件PathEditor

kml文件的 制作工具 小软件 制作kml文件

学习Linux课程第十天

不知不觉已经第十天了,感觉后面还有好多内容需要好好学习,周末再好好学习一下 一、学习配置网络 1、vim /etc/sysconfig/network-scripts/ifcfg-en0(网卡名称) 需要注意地方: BOOTPROTO=none(自动)、static(静态地址)、DHCP(动态地址) ONBOOT=yes 开机启动 IPADDR0=IP地址 PREFIX0=24 ...

weixin_30444105的博客 178

PathEditor_设置opencv路径时非常好用的工具

PathEditor_设置opencv路径时非常好用的工具

Linux学习 第十天笔记

2020年5月22日 周日 iptables与firewalld防火墙 配置网卡的4种方法 1.修改配置文件 ​ /etc/sysconfig/network-scripts/ifcfg-enoxxxx,保存后重启网卡 systemctl restart network 2.nmtui ​ RHEL 5/6 版本里是setup,7/8 版本里是nutui 3.nm-connection-editor 4.桌面右上角网卡图标 ​ 设置完后重新开关一下网卡 防火墙管理工具 iptables与firewalld都

Jaydon's Blog 248

windows环境变量编辑器:patheditor2

windows环境变量编辑器,一个很方便的工具,有了他就不用老是跑到属性页面里去修改东西了。很简单的东西啦

史上最全的Logisim运算器实验教程(基于华中科技大学计算机组成原理实验)

本博客是实现了Logisim的运算器设计,有具体的运算器设计的思路和运算器设计的电路,适合一步一步的按照思路做。

qq_62325622的博客 4万+

乐优商城第十天

0.学习目标 独立实现商品新增后台 独立实现商品编辑后台 独立搭建前台系统页面 1.商品新增 当我们点击新增商品按钮: 就会出现一个弹窗: 里面把商品的数据分为了4部分来填写: 基本信息:主要是一些简单的文本数据,包含了SPU和SpuDetail的部分数据,如 商品分类:是SPU中的cid1,cid2,cid3属性 品牌:是spu中的brandId属性 标题:是spu中的title属性...

sinat_33369322的博客 336

【yolov8】与yolov5的区别及改进详解

yolov8-----有点厉害的目标检测框架.

qq_44878985的博客 3万+

Linux学习之旅-《Linux就该这么学》—— 第十天

配置网卡4种方法: 1.vim /etc/sysconfig/network-scripts/ifcfg-eno16777736 2.nmtui 3.nm-connection-editor 4.右上角Network setting iptables是一款基于命令行的防火墙策略管理工具,具有大量参数,学习难度较大。好在对于日常的防火墙策略配置来讲,大家无需深入了解诸如“四表五链”的理论概念,只需要...

weixin_42291253的博客 222

基于深度学习的干扰识别

本文是记录我上半年仿真和复现干扰识别的过程,展示的主要是一些需要注意的点以及仿真的相关结果。

qq_55218335的博客 1702

HighScore3.0实战指南:XRD物相分析从入门到精通(持续更新版)

本文提供HighScore3.0软件进行XRD物相分析的完整实战指南。从软件设置、数据导入、背景扣除、寻峰等预处理步骤,到核心的Search & Match物相搜索匹配、Rietveld精修定量,以及结果输出与常见问题排查,系统讲解了从入门到精通的全流程操作与核心技巧,帮助用户高效完成材料物相鉴定与分析工作。

weixin_29310605的博客 1043

【React】入门第十天 - 综合练习篇

使用react + AntDesign 开发一个后台dashboard 项目 效果图 – 2020年03月16日17:30:48 说明 该项目适合入门级玩家,只需要在views添加自己的页面,然后在routes添加对应的路由即可。所有请求需要经过./src/api/request.js发起,请求需要发送一个access_token,该access_token在登录过程中会保存。 开发环境 n...

LaoShiRen的博客 321

C#精准获取Windows已安装应用清单的完整方案

Windows已安装应用识别是IT资产管理、安全合规与自动化运维的基础能力。其核心原理在于突破文件系统表象,以注册表为可信数据源,分层解析HKLM/HKCU、64位/32位视图及MSI Products路径中的元数据。技术价值体现在可验证(如过滤SystemComponent=1)、可关联(通过ProductCode绑定补丁与许可证)、可操作(启动路径二次验证+卸载命令沙箱执行)。典型应用场景包括终端合规审计、软件资产清查、静默卸载脚本开发及多版本应用聚合分析。本文聚焦C#原生实现,覆盖注册表四路采集、La

weixin_33552698的博客 634

VUE_shop(第十天)项目的打包优化

项目的打包优化 1.添加页面的加载效果 1.首先安装运行依赖nprocess,在main.js文件中的axios拦截器拦截请求的时候调用Npeocees.start. 在拦截响应的时候调用nprocess.end()来隐藏加载条 2.项目报错项的优化: 1.开发环境下的报错优化,手动去除报错的地方,重新编译运行,知道项目无报错。 2.生产环境下的报错:报错一般是console的多余导致的错误。 首...

面向许三多编程 268

PSINS工具箱15状态组合导航仿真程序(test_SINS_GPS_153)浅析-卡尔曼滤波设置+导航解算

文章目录test_SINS_GPS_153源码poserrsetkfinitgabiaskfupdate流程 test_SINS_GPS_153源码 poserrset function poserr = poserrset(dpos0, dlon, dhgt) % position errors dpos=[dlat;dlon;dhgt] setting. % % Prototype: poserr = poserrset(dpos0) % Input: dpos0=[dlat; dlon; dhgt],

十八与她的博客 2159

YOLOv11改进 | 主干/Backbone篇 | 轻量级移动端网络ShuffleNetV2(附代码+修改教程)

本文给大家带来的改进内容是ShuffleNetV2,这是一种为移动设备设计的高效CNN架构。其在ShuffleNetV1的基础上强调除了FLOPs之外,还应考虑速度、内存访问成本和平台特性。(我在YOLOv11n上修改该主干降低了GFLOPs,但是参数量还是有一定上涨,其非常适合轻量化的读者来使用,同时精度也有一定程度的上涨)。本文通过介绍其主要框架原理,然后教你如何添加该网络结构到网络模型中。

Snu77的博客 3386

十五天精通WCF——第十天 学会用SvcConfigEditor来简化配置

转自:https://www.cnblogs.com/huangxincheng/p/4644316.html    我们在玩wcf项目的时候,都是自己手工编写system.serviceModel下面的配置,虽然在webconfig中做wcf的服务配置的时候,vs提供大多 数的代码提示,但对于不太熟悉服务配置的小鸟们来说,有些困难,而且一些服务配置也容易遗漏,大多情况下,我们都是copy一份...

狂奔之林的博客 275

关务管理项目专题:SAP 与关衡关务系统的进出口报关业务集成(1)需求和方案整理

一个拥有进出口业务的企业就需要报关,而关务系统就是用来辅助企业日常进出口报关,同时数字化、合规化报关业务的有效工具。本章属于关务管理项目专题系列,以 SAP 与关衡关务系统的进出口报关业务集成为实例,详细讲解报关业务的需求和方案整理。

SAP李斌,本人承诺所有原创文章均不使用任何AI生成技术,请大家放心阅读。 2076

PDF补丁丁:免费开源的PDF处理终极指南

还在为PDF文档的各种问题头疼吗?书签混乱、页面尺寸不一、字体显示异常……这些常见的PDF难题,现在有了一个简单高效的解决方案——**PDF补丁丁**!这款完全免费的开源工具,专门解决PDF文档编辑中的各种痛点,让复杂的PDF处理变得轻松简单。 ## ✨ 为什么你需要PDF补丁丁? 想象一下这些场景: - 📚 你收集了上百篇学术论文,但文件名乱七八糟,书签结构混乱 - 📄 需要合并多个PD

gitblog_01149的博客 500

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

21天精通Audacity:从音频小白到专业编辑的实战路线图

你是否曾经因为音频质量不佳而苦恼?播客背景噪音太大、音乐混音不协调、语音录制有杂音……这些音频处理难题让很多创作者望而却步。Audacity作为一款功能强大的开源音频编辑软件,正是解决这些痛点的利器。本指南将带你用21天时间,系统掌握Audacity的核心技能,从零开始打造专业级音频作品。 ## 自我评估:你的音频编辑能力在哪一级? 在开始学习前,先评估你的当前水平: **初级(0-7分)*

gitblog_00948的博客 1164

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

【译】你不知道的 Chrome 调试工具技巧 第十一天:style editors continued(样式编辑器后续)...

特别声明 本文是作者 Tomek Sułkowski 发布在 medium 上的一个系列。据作者透露一共有 24 篇,一直更新到 12 月 24 日 版权归原作者所有。 作者在Twitter上推荐我们的中文翻译啦,截图在最后 译者在翻译前已经和作者沟通得到了翻译整个系列的授权。 为了不影响大家阅读,授权的记录在这里 正文 在马上就要迎来假期的这 24 天里,我将会发布一系列短篇的文章,关于如何更加...

weixin_34273479的博客 248

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

上一篇: 第九天:超级对话框
下一篇: 第十一天:我需要一个帮助Plug-in
std3lqi
博客等级 码龄24年 1粉丝 14原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值