Получить IFile из IWorkspaceRoot и строку местоположения - PullRequest
2 голосов
/ 17 сентября 2008

Это вопрос 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?

Ответы [ 3 ]

3 голосов
/ 17 сентября 2008

Поскольку IWorkspaceRoot является IContainer, разве вы не можете просто использовать workspaceRoot.findMember(String name) и привести полученный IResource к IFile?

3 голосов
/ 17 сентября 2008
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);
2 голосов
/ 17 сентября 2008

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] ваше решение, очевидно, предполагает, что корень рабочей области будет находиться в папке "resources"

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...