Получить IFile из IWorkspaceRoot и строку местоположения

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

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
2
0
10 058
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);

+1: хотя на самом деле это не ответ, он показал мне, как получить определенные экземпляры!

Veger 15.02.2012 15:56
Ответ принят как подходящий

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 нужен «действительный путь файловой системы в локальной файловой системе. "

Paul Reiners 17.09.2008 21:28

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

Другие вопросы по теме