Конвертировать файл, расположенный в OSGi Bundle, в IFile - PullRequest
1 голос
/ 09 февраля 2012

У меня есть установленный пакет (org.osgi.framework.Bundle) в моем текущем затмении. В этом комплекте есть файл. У меня есть путь к файлу, и я могу представить этот файл по URL (java.net.URL), используя URL url = bundle.getEntry("/folder/file").

Есть ли способ получить дескриптор этого файла типа IFile (org.eclipse.core.resources.IFile)?

Мне нужна ссылка на файл, расположенный в установленном пакете osgi типа IFile. Но я не хочу временно скопировать файл на мой локальный диск (например, рабочую область).

Заранее спасибо!

Ответы [ 2 ]

2 голосов
/ 10 февраля 2012

Если у вас есть плагин / редактор eclipse или что-то вроде этого, попробуйте:

//get the workspace
IWorkspace workspace= ResourcesPlugin.getWorkspace();

//create the path to the file
IPath location= new Path(yourURL.getPath());

//try to get the IFile (returns null if it could not be found in the workspace)
IFile file= workspace.getRoot().getFileForLocation(location);

if (file == null) {
    //not found in the workspace, get the IFileStore (external files)
    IFileStore fileStore = EFS.getLocalFileSystem().getStore(location);
    return fileStore;
} else {
    // file found, return it
    return file;
}

Полезно также:

url = FileLocator.toFileURL(yourURL);

и / или

URL resolvedUrl = FileLocator.resolve(url);

После этого вы можете создать вход для вашего редактора (я думаю, вы хотите использовать его там?)

Object file = myGetFile();
IEditorInput input;
if (file instanceof IFile) {
    input = new FileEditorInput((IFile)file);
else {
    if (file instanceof IFileStore) {
        input = new FileStoreEditorInput((IFileStore)file);
    } else {
       throw new MyException("file is null, not found");
    }
}

Надеюсь, это поможет вам.

Greetz, Adreamus

2 голосов
/ 09 февраля 2012

Это сложно.IFile представляет реальный файл, а не запись в архиве.Вам потребуется создать представление Eclipse FileSystem (EFS) для архива, но это, вероятно, будет большой работой.

Чего вы пытаетесь достичь?Наверное, есть кое-что, что вы можете сделать намного проще.

...