Eclipse插件:FileStoreEditorInput访问未保存的数据

时间:2015-05-31 12:00:40

标签: java eclipse plugins

我试图访问不属于工作空间的文件数据,经过一些测试后发现我的对象属于FileStoreEditorInput类型。我发现访问FileStoreEditorInput的数据的解决方案使用了普通的Java概念,它不应该访问Eclipse环境中未保存的数据。

对于在工作区内打开的文件,我让它使用FileEditorInput和以下(复杂的)代码:

private static IEditorReference[] ii;

private static String isOpenInEclipse(String path){
    Display.getDefault().syncExec(new Runnable() {
        @Override
        public void run() {
            ii = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().getEditorReferences();
        }
    });

    for(IEditorReference ier : ii){
        // Fetch the editor's page
        try {
            IEditorInput iei = ier.getEditorInput();
            if(iei instanceof FileEditorInput){
                IFile file = ((FileEditorInput)iei).getFile();
                IEditorPart p;
                // If the editor got the same path and is a text editor, return its data
                if(path.contains(file.getRawLocation().toOSString()) && 
                        (p = ier.getEditor(false)) instanceof ITextEditor){
                    IDocumentProvider provider = ((ITextEditor)p).getDocumentProvider();
                    IDocument document = provider.getDocument(p.getEditorInput());
                    return document.get();
                }
            }
        } catch (PartInitException e) {
            e.printStackTrace();
        }
    }

    return null;
}

FileStoreEditorInput是否有类似的解决方案,所以我可以添加方法?

1 个答案:

答案 0 :(得分:1)

FileStoreEditorInput实现了IURIEditorInput,因此您可以使用以下内容获取File对象:

if (editorInput instanceof IURIEditorInput)
 {
   IURIEditorInput uriInput = (IURIEditorInput)editorInput;

   URI uri = uriInput.getURI();

   File file = new File(uri);

   ... test path

   .. get document contents in the same way
 }