Как получить путь к текущему выбранному файлу в разработке плагина Eclipse - PullRequest
3 голосов
/ 09 января 2012

Я открываю редактор с Open with menu в Eclipse. Но я не могу получить путь к текущему выбранному файлу. Иногда он дает правильный путь, но иногда выдает исключение нулевого указателя.Я пишу следующий код, чтобы получить выбранный путь к файлу.

IWorkbenchPage iwPage=PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
     System.err.println("iwpage::"+iwPage);
     ISelection selection=iwPage.getSelection();
        System.err.println("selection::::testtttt"+selection.toString());
        if(selection!=null && selection instanceof IStructuredSelection)
        {
            IStructuredSelection selectedFileSelection = (IStructuredSelection) selection;
            System.out.println(selection.toString());
            Object obj = selectedFileSelection.getFirstElement();

            selectedFile=(IResource)obj;
            System.err.println("selection::::"+selectedFile.getLocation().toString());
            String html=selectedFile.getLocation().toString().replace(" ","%20");
            String html_file="file:///"+html;
            return html_file;


        }

Ответы [ 2 ]

4 голосов
/ 16 июня 2012

Я нашел ответ на форуме Eclipse , который кажется мне проще и работает до сих пор.

IWorkbench workbench = PlatformUI.getWorkbench();
IWorkbenchWindow window = 
        workbench == null ? null : workbench.getActiveWorkbenchWindow();
IWorkbenchPage activePage = 
        window == null ? null : window.getActivePage();

IEditorPart editor = 
        activePage == null ? null : activePage.getActiveEditor();
IEditorInput input = 
        editor == null ? null : editor.getEditorInput();
IPath path = input instanceof FileEditorInput 
        ? ((FileEditorInput)input).getPath()
        : null;
if (path != null)
{
    // Do something with path.
}

Для некоторых из этих классов требовались ссылки на новые проекты, поэтому вот списоквесь мой импорт для этого класса.Конечно, не все они связаны с этим фрагментом.

import org.eclipse.core.runtime.FileLocator;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.Path;
import org.eclipse.jface.text.ITextViewer;
import org.eclipse.jface.text.source.CompositeRuler;
import org.eclipse.jface.text.source.LineNumberRulerColumn;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.ui.IEditorInput;
import org.eclipse.ui.IEditorPart;
import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.part.FileEditorInput;
import org.osgi.framework.Bundle;
0 голосов
/ 09 января 2012

Вы можете запросить у активного редактора путь к базовому файлу. Просто зарегистрируйте IPartListener на вашем активном IWorkbenchPage и попросите этого слушателя активировать деталь. Вот фрагмент

PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage()
        .addPartListener(new IPartListener() {

            @Override
            public void partOpened(IWorkbenchPart part) {
                // TODO Auto-generated method stub

            }

            @Override
            public void partDeactivated(IWorkbenchPart part) {
                // TODO Auto-generated method stub

            }

            @Override
            public void partClosed(IWorkbenchPart part) {
                // TODO Auto-generated method stub

            }

            @Override
            public void partBroughtToTop(IWorkbenchPart part) {
                if (part instanceof IEditorPart) {
                    if (((IEditorPart) part).getEditorInput() instanceof IFileEditorInput) {
                        IFile file = ((IFileEditorInput) ((EditorPart) part)
                                .getEditorInput()).getFile();
                        System.out.println(file.getLocation());
                    }
                }

            }

            @Override
            public void partActivated(IWorkbenchPart part) {
                // TODO Auto-generated method stub

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