`
qq123zhz
  • 浏览: 534233 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

eclipse Resource 资料

    博客分类:
  • java
 
阅读更多

IWorkspace/IWorkspaceRoot/IProject/IFolder/IFile/IResource/IPath/IScope/IContainer
IResourceChangeListener/IResourceChangeEvent/IResourceDeltaVisitor

//访问工作空间
IWorkspace workspace = ResourcesPlugin.getWorkspace();

//获得工作空间中的资源层次结构的顶部
IWorkspaceRoot myWorkspaceRoot = ResourcesPlugin.getWorkspace().getRoot();
//访问工作空间中的项目
IProject myProject = myWorkspaceRoot.getProject("MyProj");
if(myProject.exists() && !myProject.isOpen())
    myProoject.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.   
}

//从原始文件复制 newLogo 文件
IFolder newImagesFolder = myProject.getFolder("newimages");
newImagesFolder.create(false, true, null);
IPath renamedPath = newImagesFolder.getFullPath().append("renamedLogo.png");
newLogo.move(renamedPath, false, null);
IFile renamedLogo = newImagesFolder.getFile("renamedLogo.png");

资源路径名不是完整的文件系统路径,而是基于项目的位置(通常是工作空间目录),要获取资源的完整文件系统路径,必须使用 IResource.getLocationURI 来查询它的位置。
给定文件系统路径,如果要获取对应的资源对象,则可以使用 IWorkspaceRoot.findFilesForLocationURI 或 IWorkspaceRoot.findContainersForLocationURI。

//控制文件系统刷新
IResource.refreshLocal(int depth, IProgressMonitor monitor)

//获得表示项目级别首选项的节点
IScopeContext 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();

//查询文件的字符集(仅应返回对该文件显式定义的字符集)
String charset = myFile.getCharset(false);

//查询文件的字符集(返回隐含的字符集)
String charset = myFile.getCharset(true);

//获取文件内容描述
IFile file = ...;
IContentDescription description = file.getDescription();

//确定给定位置对于创建链接的资源是有效的
IWorkspace.validateLinkLocation(IResource resource, IPath location)

禁用链接资源
· 项目性质否决
<extension
 id="myNature"
 name="My Nature"
 point="org.eclipse.core.resources.natures">
 <runtime>
  <run class="com.xyz.MyNature"/>
 </runtime>
 <options allowLinking="false"/>
</extension>
· 小组挂钩
如果定义自己的资源库实现,则可以利用 org.eclipse.core.resources.teamHook 扩展点来防止在共享资源库类型的项目中创建链接的资源。

//定义路径变量
IWorkspace workspace = ResourcesPlugin.getWorkspace();
IPathVariableManager pathMan = workspace.getPathVariableManager();
String name = "TEMP";
IPath value = new Path("c:\\temp");
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:\temp\folder"
link.getRawLocation() ==> "TEMP/folder"
link.isLinked() ==> "true"
  
IFile child = link.getFile("abc.txt");
child.create(...);
child.getFullPath() ==> "/Project/Link/abc.txt"
child.getLocation() ==> "c:\temp\folder\abc.txt"
child.getRawLocation() ==> "c:\temp\folder\abc.txt"
child.isLinked() ==> "false"

//创建标记
IMarker marker = file.createMarker(IMarker.TASK);

//创建具有全局作用域的标记
IMarker marker = IWorkspace.getRoot().createMarker(IMarker.TASK);

//删除标记
try {
    marker.delete();
} catch (CoreException e) {
    // Something went wrong
}

//成批删除标记
int depth = IResource.DEPTH_INFINITE;
try {
    //如果把IMarker.PROBLEM改成null,则删除所有标记
    resource.deleteMarkers(IMarker.PROBLEM, true, depth);
} catch (CoreException e) {
    // something went wrong
}

//使用平台常量来处理属性
IMarker marker = file.createMarker(IMarker.TASK);
if (marker.exists()) {
try {
    marker.setAttribute(IMarker.MESSAGE, "A sample marker message");
    marker.setAttribute(IMarker.PRIORITY, IMarker.PRIORITY_HIGH);
} catch (CoreException e) {
    // You need to handle the case where the marker no longer exists      }
}
   
//查询资源以获取其标记及其子代的标记
IMarker[] problems = null;
   int depth = IResource.DEPTH_INFINITE;
try {
   problems = resource.findMarkers(IMarker.PROBLEM, true, depth);
} catch (CoreException e) {
   // something went wrong
}

使用 org.eclipse.core.resources.markers 扩展点来声明自己的标记类型
<extension id="mymarker" point="org.eclipse.core.resources.markers" />
<extension id="myproblem" point="org.eclipse.core.resources.markers">
   <super type="org.eclipse.core.resources.problemmarker"/>
   <super type="com.example.markers.mymarker"/>
   <attribute name="myAttribute" />
   <persistent value="true" />
</extension>

//创建 com.example.markers.myproblem 标记类型的实例
public IMarker createMyMarker(IResource resource) {
   try {
      IMarker marker = resource.createMarker("com.example.markers.myproblem");
      marker.setAttribute("myAttribute", "MYVALUE");
      return marker;
   } catch (CoreException e) {
      // You need to handle the cases where attribute value is rejected
   }
}

//查询自己的标记类型(所有mymarkers和myproblems)
public IMarker[] findMyMarkers(IResource target) {
   String type = "com.example.markers.mymarker";
   IMarker[] markers = target.findMarkers(type, true, IResource.DEPTH_INFINITE);
}

//在工作空间可运行程序内的工作单元中批处理插件对工作空间进行的修改
IWorkspaceRunnable myRunnable = 
        new IWorkspaceRunnable() {
  public void run(IProgressMonitor monitor) throws CoreException {
   //do the actual work in here
   ...
  }
}

//运行工作空间可运行程序
IWorkspace workspace = ResourcesPlugin.getWorkspace();
workspace.run(myRunnable, myProject, IWorkspace.AVOID_UPDATE, null);

//从工作空间本身获取资源规则工厂
IWorkspace workspace = ResourcesPlugin.getWorkspace();
IResourceRuleFactory ruleFactory = workspace.getRuleFactory();

//可运行程序将资源从一个位置移至另一个位置,可以包含适用于此操作的规则
ISchedulingRule movingRule = ruleFactory.moveResource(sourceResource, destinationResource);
workspace.run(myRunnable, movingRule, IWorkspace.AVOID_UPDATE, null);

//使用 MultiRule 来组合多条规则
ISchedulingRule movingRule = ruleFactory.moveResource(sourceResource, destinationResource);
ISchedulingRule modifyRule = ruleFactory.modifyResource(destinationResource);
workspace.run(myRunnable, MultiRule.combine(movingRule, modifyRule), IWorkspace.AVOID_UPDATE, null);

//不包括规则或更新标志的简短格式
workspace.run(myRunnable, null);

//指定工作空间根作为调度规则将锁定整个工作空间,直到可运行程序完成为止。
//这是执行工作空间更新的最稳当方法,但是它不太支持其他重视并行的插件。
workspace.run(myRunnable, workspace.getRoot(), IWorkspace.AVOID_UPDATE, null);

//跟踪插件运行时发生的所有工作空间更改
IResourceChangeListener listener = new MyResourceChangeReporter();
ResourcesPlugin.getWorkspace().addResourceChangeListener(listener, IResourceChangeEvent.POST_CHANGE);

//注册资源更改侦听器
IResourceChangeListener listener = new MyResourceChangeReporter();
ResourcesPlugin.getWorkspace().addResourceChangeListener(listener,
      IResourceChangeEvent.PRE_CLOSE | IResourceChangeEvent.PRE_DELETE
      | IResourceChangeEvent.PRE_AUTO_BUILD | IResourceChangeEvent.POST_AUTO_BUILD
      | IResourceChangeEvent.POST_CHANGE);

//实现资源更改侦听器
public class MyResourceChangeReporter implements IResourceChangeListener {
   public void resourceChanged(IResourceChangeEvent event) {
      IResource res = event.getResource();
      switch (event.getType()) {
         case IResourceChangeEvent.PRE_CLOSE:
            System.out.print("Project ");
            System.out.print(res.getFullPath());
            System.out.println(" is about to close.");
            break;
         case IResourceChangeEvent.PRE_DELETE:
            System.out.print("Project ");
            System.out.print(res.getFullPath());
            System.out.println(" is about to be deleted.");
            break;
         case IResourceChangeEvent.POST_CHANGE:
            System.out.println("Resources have changed.");
            event.getDelta().accept(new DeltaPrinter());
            break;
         case IResourceChangeEvent.PRE_AUTO_BUILD:
            System.out.println("Auto build about to run.");
            event.getDelta().accept(new DeltaPrinter());
            break;
         case IResourceChangeEvent.POST_AUTO_BUILD:
            System.out.println("Auto build complete.");
            event.getDelta().accept(new DeltaPrinter());
            break;
      }
   }
}

//查询资源变化的实现类
class DeltaPrinter implements IResourceDeltaVisitor {
   public boolean visit(IResourceDelta delta) {
      IResource res = delta.getResource();
      switch (delta.getKind()) {
         case IResourceDelta.ADDED:
            System.out.print("Resource ");
            System.out.print(res.getFullPath());
            System.out.println(" was added.");
            break;
         case IResourceDelta.REMOVED:
            System.out.print("Resource ");
            System.out.print(res.getFullPath());
            System.out.println(" was removed.");
            break;
         case IResourceDelta.CHANGED:
            System.out.print("Resource ");
            System.out.print(res.getFullPath());
            System.out.println(" has changed.");
            break;
      }
      return true; // visit the children
   }
}

//从提供的资源变化中获取进一步的信息
case IResourceDelta.CHANGED:
   System.out.print("Resource ");
   System.out.print(delta.getFullPath());
   System.out.println(" has changed.");
   int flags = delta.getFlags();
   if ((flags & IResourceDelta.CONTENT) != 0) {
         System.out.println("--> Content Change");
   }
   if ((flags & IResourceDelta.REPLACED) != 0) {
         System.out.println("--> Content Replaced");
   }
   if ((flags & IResourceDelta.MARKERS) != 0) {
         System.out.println("--> Marker Change");
         IMarkerDelta[] markers = delta.getMarkerDeltas();
         // if interested in markers, check these deltas
   }
   break;

//将工作移至 WorkspaceJob 子类型
class MyWorkspaceJob extends WorkspaceJob {
 public MyWorkspaceJob() {
  super("My Workspace Job");
 }
 public IStatus runInWorkspace(IProgressMonitor monitor) {
  //do the actual work in here
  doSomeWork();
  return Status.OK_STATUS;
 }
}

//对该作业附加调度规则以避免同时修改 myProject
MyWorkspaceJob job = new MyWorkspaceJob();
job.setRule(myProject);
job.schedule();

分享到:
评论

相关推荐

    eclipse.jet resource

    Eclipse Jet,全称为JSP Template Engine,是Eclipse基金会下的一个项目,主要用来生成动态内容,特别是用于Java服务器端的Web应用开发。Jet引擎允许开发者使用Java语法和模板语言来编写可重用的代码片段,这些代码...

    Eclipse Resource Labels-开源

    Eclipse Resource Labels是一款开源插件,专为Eclipse集成开发环境(IDE)设计,旨在增强其资源管理功能,提供更加丰富的资源标签展示和便捷的上下文菜单操作。这款插件的目的是为了提升开发者的工作效率,使得在处理...

    eclipse 获得透视图切换事件

    在Eclipse这样的集成开发环境中(IDE),透视图(Perspective)是组织工作空间的重要方式,它定义了不同类型的编辑器、视图和控制台的布局,以适应不同的开发任务。例如,Java开发者可能会使用Java透视图,而数据库...

    org.eclipse.swt.win32

    org.eclipse.swt.graphics.Resource.class org.eclipse.swt.graphics.TextLayout.class org.eclipse.swt.graphics.TextStyle.class org.eclipse.swt.graphics.Transform.class org.eclipse.swt.internal.BidiUtil....

    2018最新Eclipse下载安装包

    - **代码导航**:Eclipse的"Open Type"和"Open Resource"功能可以快速定位类和文件。 - **重构**:Eclipse提供了丰富的重构工具,如重命名、提取方法、移动文件等。 - **构建工具**:Maven和Gradle插件使得...

    org.eclipse.jface.text_3.12.2.v20180112-1341.zip

    标题中的"org.eclipse.jface.text_3.12.2.v20180112-1341.zip"是Eclipse插件的一个版本,它专注于文本编辑功能。Eclipse是一个开源的集成开发环境(IDE),而JFace是Eclipse的一部分,提供了面向用户的界面组件。...

    Eclipse Resource Filter-开源

    使用模式和正则表达式在Eclipse Navigator面板中过滤文件。 将过滤器应用于特定的文件夹,软件包或项目! 立即使用更新站点http://eclipseresfltr.sourceforge.net/update从Eclipse中安装此插件。

    eclipse svn1.8插件下载

    1. 版本库资源浏览:你可以通过“资源”(Resource)视图或“版本资源”(Team Synchronizing)视图查看版本库中的项目和文件。 2. 检出与导入:你可以从版本库中检出项目到本地工作空间,或者将现有项目导入到版本...

    eclipse提示失效解决办法

    ### Eclipse提示失效问题详解及解决方法 #### 一、问题背景 在使用Eclipse进行Java开发时,很多开发者会遇到一个常见的问题:Eclipse中的自动完成功能(即Alt+/快捷键)突然失效,无法正常使用。这给编程工作带来了...

    hadoop-eclipse2.7.1、hadoop-eclipse2.7.2、hadoop-eclipse2.7.3

    5. **与Hadoop YARN的集成**:从Hadoop 2.x开始,资源管理和调度功能由新的YARN(Yet Another Resource Negotiator)接管。Hadoop-Eclipse 2.7.x版本应该已经支持与YARN的交互,允许开发者在分布式环境中管理资源和...

    Hadoop-eclipse插件

    4. **配置Hadoop连接**:在Eclipse中,通过`Window &gt; Preferences &gt; Hadoop Map/Reduce &gt; JobTracker`菜单选项,配置你的Hadoop集群的JobTracker地址(在YARN中是Resource Manager)。同样,也需要设置HDFS的...

    hadoop-eclipse插件各版本合集

    - 例如,从2.2.0到2.7.x,Hadoop进行了大量的优化,增强了稳定性,支持更多高级特性,如YARN(Yet Another Resource Negotiator)资源调度器的引入,提高了资源管理和任务调度的效率。 5. **安装与使用**:用户...

    Eclipse快速打开文件

    2. **Navigate** 菜单:在主菜单栏中选择 "Navigate",然后选择 "Open Type" 或 "Open Resource",可以分别按类名和资源路径查找并打开文件。 3. **Project Explorer**:这是Eclipse的标准视图之一,显示了项目的...

    eclipse development envrioument resource donwload and deploy

    1、extjs 、eclipse、tomcat、jdk下载 2、系统环境变量的配置

    eclipse的subversion插件

    【Eclipse的Subversion插件Subclipse详解】 Subversion(SVN)是一种广泛使用的版本控制系统,它可以跟踪文件和目录的变化,允许团队成员协同工作。Eclipse IDE中的Subclipse插件为开发者提供了方便的Subversion...

    eclipse birt chart engine example resource code

    "Eclipse BIRT Chart Engine Example Resource Code" 提供的是一个示例资源代码库,帮助开发者更好地理解和使用BIRT图表引擎。 **BIRT图表引擎核心概念:** 1. **图表引擎**:这是BIRT的核心组件之一,负责生成...

    hadoop2.7.3 eclipse插件

    首先,Hadoop Eclipse插件是一个强大的工具,它允许开发者直接在Eclipse环境中创建、编辑和管理Hadoop MapReduce项目。这个插件提供了图形化的JobTracker和TaskTracker视图,使用户可以实时监控作业的执行状态,极大...

    关于eclipse发布web项目中遇到的问题

    Eclipse 发布 Web 项目中遇到的问题解决方案 Eclipse 是一个功能强大且广泛使用的集成开发环境(IDE),它支持多种编程语言和开发平台。然而,在使用 Eclipse 发布 Web 项目时,可能会遇到一些问题,这篇文章将解决...

    eclipse-Scala插件

    例如,你可以使用"Open Type"或"Open Resource"查找类、对象或文件,使用"Search"功能在项目中进行全局搜索。此外,"Outline"视图则可以帮助你快速理解代码结构。 总之,"Eclipse Scala插件"极大地提升了Eclipse...

Global site tag (gtag.js) - Google Analytics