从IWorkspaceRoot和位置字符串获取IFile

时间:2020-03-05 18:59:13  来源:igfitidea点击:

这是一个Eclipse问题,我们可以假定所有这些Eclipse类的Java包都是" org.eclipse.core.resources"。

我想得到一个与位置String相对应的IFile,我有:

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

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

如何从"字符串"位置获取相应的" IPath"?还是有其他方法来获取相应的" IFile"?

解决方案

回答

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);

回答

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

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

如果位置字符串不是" platform"类型的URL,则该方法可行。

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

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

@ [Paul Reiners]解决方案显然假设工作空间的根目录将位于" resources"文件夹中

回答

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