Eclipse RCP 资源管理(自定义Project)一 (转)

基本概念

Eclipse开发平台提供资源插件(org.eclipse.core.resources),插件提供对项目(Project)、文件(File)、文件夹(Folder)的相关管理和操作。

工作区(workspace)是用户数据文件在平台中的组织和保存区,工作区中的文件通过资源的概念进行组织。工作台(Workbench)可以理解为用户浏览和操作工作区的一个工具。资源插件提供创建、导航、操作工作区中资源的API。工作台利用这些API提供对应功能给用户,这些API也允许用户进行扩展。

资源有三种类型:项目(Project)、文件(File)、文件夹(Folder)。项目中包含若干个文件和文件夹,作为一个表示特殊区域的资源单元和容器,项目之间不可嵌套。工作区中有若干个项目。文件和文件夹的概念和OS中的概念类似。

工作区中的资源以资源树的形式进行组织,文件和文件夹都是项目的后代结点。定义了一个工作区根作为一类特殊的资源存在,作为资源树的根节点。

资源的访问

在开发平台中,工作区由IWorkspace的实例进行表示,IWorkspace提供对工作区中的资源访问接口。具体的,通过如下语句获取工作区实例:

IWorkspace workspace = ResourcesPlugin.getWorkspace();

在文件系统中,工作区与一般的文件夹结构一致。但包含有两类隐藏文件(夹),.metadata存放于工作区根位置,是一个文件夹,文件夹中保存包含有工作区结构的信息文件,在开发平台中必须通过特殊的插件API进行访问;.project则存在于项目节点位置,是一文件,文件中保存着与IProjectDescription.一致的信息。

资源插件提供IProject,IFolder, and IFile实现用户对这些资源类型的访问,IResource中则定义了扩展的通用操作接口,还可以使用org.eclipse.core.runtime中的接口IPath来表示工作区的资源或文件系统的访问路径。

对资源的访问与对Java.io.File的访问类似,当调用对应API时,返回一个句柄,不需要在访问前确保资源是否存在。具体的,通过如下代码实现访问:

//获取工作区根 
 
IWorkspaceRoot myWorkspaceRoot = ResourcesPlugin.getWorkspace().getRoot(); 
 
//从工作区根获得项目实例 
 
IProject myWebProject = myWorkspaceRoot.getProject("MyWeb"); 
 
// open if necessary 
 
if (myWebProject.exists() && !myWebProject.isOpen()) myWebProject.open(null); 

在对项目进行操作前,必须执行打开操作。打开项目操作将从文件系统中读取项目结构并读入内存,创建对应的项目资源树,这是一个显式的操作。

获取项目实例的再下一层,就是对项目中的文件和文件夹进行访问:

//获取文件夹实例 
 
IFolder imagesFolder = myWebProject.getFolder("images"); 
 
if (imagesFolder.exists()) { 
 
// create a new file 
 
IFile newLogo = imagesFolder.getFile("newLogo.png"); 
 
    //文件系统的创建过程 
 
FileInputStream fileStream = new FileInputStream("c:/MyOtherData/newLogo.png"); 
 
    newLogo.create(fileStream, false,null); 
 
    // create closes the file stream, so no worries.  
 
}  

上面的过程,首先获取images文件夹的句柄,在判断其存在后,在其中创建新文件newLogo。

资源与文件系统的关联

通过接口IResource.getLocationURI来获得资源的绝对文件系统路径。反过来,通过IWorkspaceRoot的findFilesForLocationURI或者findContainersForLocationURI来实现文件系统路径到工作区路径的mapping。

资源属性

用于保存资源相关的特殊信息,包含会话级和持久级。会话级当项目关闭后失效,用于在内存中方便以名值对形式保存属性,持久级则在文件系统中保留资源属性,有长度限制(不大于2kb,对用于对象的持久化似乎有难度),需要注意命名时不要出现冲突。

项目级参数

可以为运行时参数Runtime preferences定义项目级范围(Project-Scope),用于在项目范围内对参数进行保存和操作:

//获取ContextIScopeContext projectScope = new ProjectScope(MyProject);//获取对应项目的参数节点Preferences projectNode = projectScope.node("com.example.myplugin");if (projectNode != null) {value = node.getBoolean("MyPreference", "true");//do something with the value.} 
//参数回写 
 
projectNode.flush(); 

资源挂接

工作区中的资源可以来自文件系统的不同位置,通过资源挂接来实现。实例代码:

 IWorkspace workspace = ResourcesPlugin.getWorkspace(); 
 
   IPathVariableManager pathMan = workspace.getPathVariableManager(); 
 
   String name = "TEMP"; 
 
   IPath value = new Path("c:\temp"); 
 
   //定义path变量,实现资源挂接 
 
if (pathMan.validateName(name).isOK() && pathMan.validateValue(value).isOK()) { 
 
      pathMan.setValue(name, value); 
 
   } else { 
 
      //invalid name or value, throw an exception or warn user 
 
   } 
 
   IProject project = workspace.getProject("Project");//assume this exists 
 
   IFolder link = project.getFolder("Link"); 
 
   IPath location = new Path("TEMP/folder"); 
 
   //在资源操作前需要加入验证动作 
 
if (workspace.validateLinkLocation(location).isOK()) { 
 
      link.createLink(location, IResource.NONE, null); 
 
   } else { 
 
      //invalid location, throw an exception or warn user 
 
   } 
 
   //运行结果 
link.getFullPath() ==> "/Project/Link" 
   link.getLocation() ==> "c:tempfolder" 
 
   link.getRawLocation() ==> "TEMP/folder" 
 
   link.isLinked() ==> "true" 
 
   
 
   IFile child = link.getFile("abc.txt"); 
 
   child.create(...); 
 
   child.getFullPath() ==> "/Project/Link/abc.txt" 
 
   child.getLocation() ==> "c:tempfolderabc.txt" 
 
   child.getRawLocation() ==> "c:tempfolderabc.txt" 
 
   child.isLinked() ==> "false" 

转自:http://lengbingteng-163-com.iteye.com/blog/1118641

时间: 2024-10-11 00:18:43

Eclipse RCP 资源管理(自定义Project)一 (转)的相关文章

Eclipse RCP 中创建自定义首选项,并能读取首选项中的值

Eclipse RCP的插件中若想自己定义首选项需要扩展扩展点: org.eclipse.core.runtime.preferences //该扩展点用于初始化首选项中的值 org.eclipse.ui.preferencePages//该扩展点用于定义自己的首选项页面 plugin.xml中内容如: Database Preferences挂在WorkFlowBase下,需要在category中填写workFlowBase的ID WorkFlowPreferenceInitializer类,

Eclipse rcp 开发 : 自定义导航视图CNF(3)为导航视图增加隐藏文件功能

org.eclipse.ui.navigator.navigatorContent 右键新增commonFilter id:  唯一 name :名称 如:*.xml resources description:描述, 如:Hides *.xml resources 在该属性下载增加属性:其中的value为通配xml  <filterExpression>             <and>                <adapt                     

Eclipse RCP开发桌面程序

所谓RCP,就是Rich Client Platform的缩写,即富客户平台,是Eclipse进化的产物(自3.0版以后出现),是Eclipse组织向用户提供的强大的开放性开发平台,能够使用户方便地创建自己的基于Eclipse的应用程序,并且这些应用程序能够得到Eclipse的底层支持.更重要的是,我们可以利用Java创建象Eclipse这么漂亮的桌面程序. 我相信,在未来的几年里,RCP一定会变得非常流行.使用RCP,我们可以开发界面象Eclipse这样漂亮的桌面程序,比如医院管理系统啊.CA

Eclipse rcp 项目开发实战2 : 创建插件开发工程

输入工程名称,其它默认即可 输入创建插件工程相关信息,Rich Client Application 要选择Yes 来创建RCP工程,其它数据一般默认即可. 选择模板,也就是Demo,在这一步选择完成后,其实就可以直接Finish了. 最后一步,输入名字,包名和应用的类的名称 一个简单地插件工程就已经创建完成. 启动工程,第一次启动有三种方法, 6.1 选择工程,右键Run As -- Eclipse Application 即可, 6.2 打开mf文件, 下拉选择,Launch an Ecli

用Eclipse开发Dynamic Web Project 应用程序

用Eclipse 开发Dynamic Web Project应用程序 (2012-12-04 11:23:08) 标签: 杂谈 分类: web开发 http://blog.csdn.net/blue_fire2008/article/details/7525557 简介:本文仅简单介绍基于Eclipse开发Dynamic Web Project应用下的JSP,Servlet及TOMCAT数据源的配置和开发. 软件环境: Eclipse Java EE IDE for Web Developers

用Eclipse 开发Dynamic Web Project应用程序 【转】

简介:本文仅简单介绍基于Eclipse开发Dynamic Web Project应用下的JSP,Servlet及TOMCAT数据源的配置和开发. 软件环境: Eclipse Java EE IDE for Web Developers压缩包eclipse-jee-indigo-SR2-win32.zip JDK安装包jdk-7u1-windows-i586.exe TOMCAT安装包apache-tomcat-7.0.27.exe MySQL压缩包mysql-6.0.4-alpha-win32.

Eclipse RCP 玩转 Spring

近来上一个项目想在Eclipse RCP中使用Spring,在网上Google了一下发现这方面的材料比较少,晓得Spring自个有个Spring-OSGI的项目,能够在Spring中装备OSGI效劳.但是,我仅仅想在RCP中引进Spring来管理Java Bean,不想去研讨那个东西.所以,看看有没有啥简略的方法来处理这个疑问.在陈刚的BlOG中找到了疑问的有些答案.       所以,我在RCP项目的activator class中加入了 ? private ApplicationContex

在Eclipse中JFrame自定义图标可以显示,但是导出JAR之后无法显示

在我的项目中,一开始我使用这种方式构造图片路径,然后将其设置到JFrame中即可以显示自定义图标 String imagePath = System.getProperty("user.dir") + "/image/icon.png";// 构造图片的路径 Image imageIcon = Toolkit.getDefaultToolkit().getImage(imagePath); jFrame.setIconImage(imageIcon); 项目路径如下

eclipse rcp控制台

ConsoleViewPart.java package com.wbq.console; import org.eclipse.ui.console.ConsolePlugin;import org.eclipse.ui.console.IConsole;import org.eclipse.ui.console.IConsoleFactory;import org.eclipse.ui.console.IConsoleManager;import org.eclipse.ui.console