【问题标题】:Get IFile from IWorkspaceRoot and location String从 IWorkspaceRoot 和位置字符串获取 IFile
【发布时间】:2010-09-10 05:31:19
【问题描述】:

这是一个 Eclipse 问题,您可以假设所有这些 Eclipse 类的 Java 包是org.eclipse.core.resources

我想得到一个IFile 对应于一个位置String 我有:

 "platform:/resource/Tracbility_All_Supported_lib/processes/gastuff/globalht/GlobalHTInterface.wsdl"

我有封闭的IWorkspaceIWorkspaceRoot。如果我有对应上述位置的IPath,我可以简单地调用IWorkspaceRoot.getFileForLocation(IPath)

如何从位置String 获取对应的IPath?或者有没有其他方法可以得到对应的IFile

【问题讨论】:

    标签: java eclipse


    【解决方案1】:

    由于 IWorkspaceRoot 是一个 IContainer,你不能只使用 workspaceRoot.findMember(String name) 并将生成的 IResource 转换为 IFile 吗?

    【讨论】:

      【解决方案2】:
      String platformLocationString = portTypeContainer
              .getLocation();
      String locationString = platformLocationString
              .substring("platform:/resource/".length());
      IWorkspace workspace = ResourcesPlugin.getWorkspace();
      IWorkspaceRoot workspaceRoot = workspace.getRoot();
      IFile wSDLFile = (IFile) workspaceRoot
              .findMember(locationString);
      

      【讨论】:

      • +1:虽然这不是一个真正的答案,但它向我展示了如何获取某些实例!
      【解决方案3】:

      org.eclipse.core.runtime.Path 实现了 IPath。

      IPath p = new Path(locationString);
      IWorkspaceRoot.getFileForLocation(p);
      

      如果位置字符串不是“平台:”类型的 URL,这将有效

      对于这种特殊情况,org.eclipse.core.runtime.Platform javadoc 中的注释表明“正确”的解决方案类似于

      fileUrl = FileLocator.toFileURL(new URL(locationString)); 
      IWorkspaceRoot.getFileForLocation(fileUrl.getPath());
      

      @[Paul Reiners] 您的解决方案显然假定工作区根将位于“资源”文件夹中

      【讨论】:

      • 不,实际上这不起作用。我认为这是因为 locationString 的格式如下:“platform:/resource/Tracbility_All_Supported_lib/processes/gastuff/globalht/GlobalHTInterface.wsdl”,但 Path 构造函数需要“本地文件系统上的有效文件系统路径”。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多