Это вопрос Eclipse, и вы можете предположить, что пакет Java для всех этих классов Eclipse - org.eclipse.core.resources.
Я хочу получить IFile, соответствующий местоположению String, которое у меня есть:
"platform:/resource/Tracbility_All_Supported_lib/processes/gastuff/globalht/GlobalHTInterface.wsdl"
Имею прилагающиеся IWorkspace и IWorkspaceRoot. Если бы у меня был IPath, соответствующий указанному выше местоположению, я мог бы просто вызвать IWorkspaceRoot.getFileForLocation(IPath).
Как мне получить соответствующий IPath из местоположения String? Или есть другой способ получить соответствующий 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);
Это сработало бы, если бы строка местоположения не была URL-адресом типа "платформа:"
В этом конкретном случае примечания в javadoc org.eclipse.core.runtime.Platform указывают, что «правильное» решение - это что-то вроде
fileUrl = FileLocator.toFileURL(new URL(locationString));
IWorkspaceRoot.getFileForLocation(fileUrl.getPath());
@ [Paul Reiners] ваше решение, по-видимому, предполагает, что корень рабочей области будет в папке "resources"
Нет, вообще-то это не сработало. Я думаю, это потому, что locationString имеет такой формат: «платформа: / resource / Tracbility_All_Supported_lib /cesses / g astuff / globalht / Glob alHTInterface.wsdl», но конструктору Path нужен «действительный путь файловой системы в локальной файловой системе. "
Поскольку IWorkspaceRoot является IContainer, не могли бы вы просто использовать workspaceRoot.findMember(String name) и преобразовать полученный IResource в IFile?
+1: хотя на самом деле это не ответ, он показал мне, как получить определенные экземпляры!