Обновление (январь 2012)
Джеймс Мур упоминает в комментарии , что FAQ и API довольно старые.
FileLocator.resolve(URL)
теперь предпочтительнее устаревшего Platform.resolve()
.
Как показывает в этом примере , вам необходимо передать фактический ресурс (здесь bundle ), а не имя ресурса, для его разрешения:
private static URI locateFile(String bundle, String fullPath) {
try {
URL url = FileLocator.find(Platform.getBundle(bundle), new Path(fullPath), null);
if(url != null)
return FileLocator.resolve(url).toURI();
} catch (Exception e) {}
return null;
}
}
См. Также « Как обратиться к файлу из файла jar в плагине eclipse » для получения дополнительной информации.
Оригинальный ответ (январь 2011 г.)
Может быть, часто задаваемые вопросы " Как узнать местоположение установки плагина? " может помочь здесь:
Как правило, следует избегать предположений о расположенииподключаемого модуля во время выполнения.
Чтобы найти ресурсы, например изображения, которые хранятся в каталоге установки вашего подключаемого модуля, вы можете использовать URL-адреса, предоставленные классом Platform
.Эти URL-адреса используют специальный протокол платформы Eclipse, но если вы используете их только для чтения файлов, это не имеет значения.
В Eclipse 3.1 и более ранних версиях следующий фрагмент открывает поток ввода для файла с именем sample.gif
находится в подкаталоге, называемом icons
, каталога установки плагина:
Bundle bundle = Platform.getBundle(yourPluginId);
Path path = new Path("icons/sample.gif");
URL fileURL = Platform.find(bundle, path);
InputStream in = fileURL.openStream();
Если вам нужно узнать расположение файловой системы плагина, вынужно использовать Platform.resolve(URL)
.Этот метод преобразует URL-адрес платформы в стандартный протокол URL-адреса, такой как протокол передачи гипертекста (HTTP) или файл.
Обратите внимание, что платформа Eclipse не указывает, что плагины должны существовать в локальной файловой системе, поэтому вы не можетеполагайтесь на этот метод, возвращающий URL файловой системы при любых обстоятельствах в будущем.
В Eclipse 3.2 предпочтительный метод выглядит следующим образом:
Bundle bundle = Platform.getBundle(yourPluginId);
Path path = new Path("icons/sample.gif");
URL fileURL = FileLocator.find(bundle, path, null);
InputStream in = fileURL.openStream();