我目前正在Eclipse Neon中开发一个编辑器插件。除了使用编辑器打开文件之外,一切都很完美,这些文件不是在当前Eclipse项目中创建的,而是手动在工作区外的文件夹中创建的(例如Documents)。
在我的实现中,我需要我要打开的每个文件的IStorage
。我目前的代码如下:
public static IStorage getStorage(IEditorInput editorInput) {
if (editorInput instanceof IStorageEditorInput) {
try {
return ((IStorageEditorInput) editorInput).getStorage();
}
catch (CoreException e) {
throw new RuntimeException(e);
}
}
else if (editorInput instanceof FileStoreEditorInput) {
try {
IURIEditorInput uriInput = (IURIEditorInput)editorInput;
URI uri = uriInput.getURI();
File file = new File(uri);
return ((IStorageEditorInput) editorInput).getStorage(); // How to get the IStorage
}
catch (CoreException e) {
throw new RuntimeException(e);
}
}
else {
throw new IllegalArgumentException("Unknown IEditorInput implementation");
}
}
重要的情况是editorInput
是FileStoreEditorInput
的实例,在第二个if中处理。目前,我从中获取了一个文件,但我不知道如何从文件或IStorage
本身获取FileStoreEditorInput
。
答案 0 :(得分:2)
我不知道有办法为IStorage
获得FileStoreEditorInput
。除了您可以尝试查看editorInput.getAdapter( IStorage.class )
是否返回有用的内容。
但是,您可以自己实现IStorage
界面。例如:
class FileStorage implements IStorage {
private final FileStoreEditorInput editorInput;
FileStorage( FileStoreEditorInput editorInput ) {
this.editorInput = editorInput;
}
@Override
public <T> T getAdapter( Class<T> adapter ) {
return Platform.getAdapterManager().getAdapter( this, adapter );
}
@Override
public boolean isReadOnly() {
return false;
}
@Override
public String getName() {
return editorInput.getName();
}
@Override
public IPath getFullPath() {
return new Path( URIUtil.toFile( editorInput.getURI() ).getAbsolutePath() );
}
@Override
public InputStream getContents() {
try {
return editorInput.getURI().toURL().openStream();
} catch( IOException e ) {
throw new UncheckedIOException( e );
}
}
}