Eclipse 插件:FileStoreEditorInput 访问未保存的数据
Eclipse Plugin: FileStoreEditorInput access unsaved data
我正在尝试访问不属于工作区的文件数据,经过一些测试发现我的对象属于 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 是否有类似的解决方案,所以我可以添加该方法?
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
}
我正在尝试访问不属于工作区的文件数据,经过一些测试发现我的对象属于 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 是否有类似的解决方案,所以我可以添加该方法?
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
}