2

这是一个 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).

我如何IPath从该位置获得对应的String?还是有其他方法可以获得相应的IFile

4

3 回答 3

3
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);
于 2008-09-17T16:32:15.713 回答
3

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

于 2008-09-17T17:15:30.477 回答
2

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] 您的解决方案显然假设工作区根将位于“资源”文件夹中

于 2008-09-17T16:38:14.433 回答