gpt4 book ai didi

java - 从 Eclipse 中外部创建的文件获取存储

转载 作者:行者123 更新时间:2023-11-30 02:42:59 26 4
gpt4 key购买 nike

我目前正在 Eclipse Neon 中开发一个编辑器插件。除了使用编辑器打开文件之外,一切都运行良好,这些文件不是在当前 Eclipse 项目内部创建的,而是在工作区外部的文件夹(例如文档)中手动创建的。

在我的实现中,我需要我想要打开的每个文件的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 中处理。目前,我从中获取了一个文件,但我不知道如何从文件或从 FileStoreEditorInput 本身获取 IStorage

最佳答案

我不知道有一种方法可以为 FileStoreEditorInput 获取 IStorage。除非您可以尝试查看 editorInput.getAdapter( IStorage.class ) 是否返回有用的内容。

但是,您可以自己实现IStorage 接口(interface)。例如:

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 );
}
}
}

关于java - 从 Eclipse 中外部创建的文件获取存储,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41103500/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com