如何在eclipse中保存编辑器状态

Posted

技术标签:

【中文标题】如何在eclipse中保存编辑器状态【英文标题】:How to save an editor state in eclipse 【发布时间】:2015-08-10 12:26:43 【问题描述】:

我创建了一个从视图打开的编辑器。

更具体地说,我创建了一个扩展EditorPart 的编辑器类和一个扩展IEditorInput 的编辑器输入。我还创建了一个视图,如果你双击视图中的一个元素,编辑器就会打开。编辑器只显示一棵树。

一切正常。我需要做的是,在我更改编辑器时保存编辑器的状态,例如当我将 treeItem 添加到树时。

我已经阅读了一些教程,但其中大多数都解释了如何使用 mementos 来保存视图状态。我是 Eclipse 开发的新手,所以请多多包涵:P

【问题讨论】:

这是一个相当广泛的问题。大多数编辑器都在编辑或创建文件,这里不是这样吗? 如果编辑器支持文件扩展名,例如 .txt,则保存过程是自动的,因为对文件进行了更改。就我而言,它是一种图形,而不是文本,因为它显示了一棵树,所以它不能保存为文件。我的猜测是您以某种方式将树元素保存在备忘录中,然后将备忘录保存为像视图一样的 xml 文件,但我无法将其拉下来,atm:P 【参考方案1】:

如果您没有要保存的文件,您可以将数据放在插件的“状态位置”中 - 这是工作区 .metadata/.plugins 目录中的一个文件夹,您的插件可以随意使用它.

您使用以下方式获取状态位置:

Bundle bundle = Platform.getBundle("your plugin id");

IPath stateLoc = Platform.getStateLocation(bundle);

注意:获取Bundle有多种方式,例如你也可以使用:

Bundle bundle = FrameworkUtil.getBundle(getClass());

返回当前类的包。

您可以以任何您喜欢的格式保存/恢复您的文件。你提到了备忘录格式。使用以下方式写一个纪念品:

XMLMemento memento = XMLMemento.createWriteRoot("root");

 ... add your entries

try (Writer writer = new OutputStreamWriter(new FileOutputStream("file name"), StandardCharsets.UTF_8)) 
 
    memento.save(writer);
 

阅读备忘录,例如:

try (Reader reader = new InputStreamReader(new FileInputStream("file name"), StandardCharsets.UTF_8)) 
 
   IMemento memento = XMLMemento.createReadRoot(reader);

   ... read the memento contents
 

【讨论】:

非常感谢您的回答。该路径对于保存数据当然非常有用。我觉得你的方法非常好。我会那样做的。

以上是关于如何在eclipse中保存编辑器状态的主要内容,如果未能解决你的问题,请参考以下文章

如何在PrimeFaces中找出DataTable是否处于行编辑状态?

如何在不关闭的情况下保存 Spyder IDE 状态?

如何阻止 Eclipse 上的 JPA Facet 一直更新?

如何解决在Ue4编辑器中查看中文注释为乱码的情况

如何通过删除状态栏、快速访问和拆分视图控件来节省 Eclipse 中的垂直空间?

eclipse 中图标栏如何设置大小