我在运行的日食中安装了一个包(org.osgi.framework.Bundle)。此捆绑包中有一个文件。我有文件的路径,我可以使用URL url = bundle.getEntry("/folder/file")
通过URL(java.net.URL)表示此文件。
有没有办法获取IFile类型的这个文件的句柄(org.eclipse.core.resources.IFile)?
我需要一个位于IFile类型的已安装的osgi包中的文件的引用。但我不想要在我的本地磁盘上临时复制文件(如工作区)。
提前致谢!
答案 0 :(得分:2)
这很难。 IFile
表示实际文件而不是存档中的条目。您需要为存档构建Eclipse FileSystem(EFS)表示,但这可能需要做很多工作。
你想要达到什么目的?你可以做的事情可能更简单。
答案 1 :(得分:2)
如果您有一个eclipse插件/编辑器或类似的东西,请尝试:
//get the workspace
IWorkspace workspace= ResourcesPlugin.getWorkspace();
//create the path to the file
IPath location= new Path(yourURL.getPath());
//try to get the IFile (returns null if it could not be found in the workspace)
IFile file= workspace.getRoot().getFileForLocation(location);
if (file == null) {
//not found in the workspace, get the IFileStore (external files)
IFileStore fileStore = EFS.getLocalFileSystem().getStore(location);
return fileStore;
} else {
// file found, return it
return file;
}
有用的也可以:
url = FileLocator.toFileURL(yourURL);
和/或
URL resolvedUrl = FileLocator.resolve(url);
在此之后你可以为编辑器创建输入(我想你想在那里使用它?)
Object file = myGetFile();
IEditorInput input;
if (file instanceof IFile) {
input = new FileEditorInput((IFile)file);
else {
if (file instanceof IFileStore) {
input = new FileStoreEditorInput((IFileStore)file);
} else {
throw new MyException("file is null, not found");
}
}
我希望这会对你有所帮助。
格尔茨, Adreamus