从IWorkspaceRoot和location String获取IFile

时间:2008-09-17 15:53:43

标签: java eclipse

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

3 个答案:

答案 0 :(得分: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);

答案 1 :(得分:3)

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

答案 2 :(得分:2)

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