将位于OSGi Bundle中的文件转换为IFile

时间:2012-02-09 17:21:47

标签: java eclipse-plugin osgi

我在运行的日食中安装了一个包(org.osgi.framework.Bundle)。此捆绑包中有一个文件。我有文件的路径,我可以使用URL url = bundle.getEntry("/folder/file")通过URL(java.net.URL)表示此文件。

有没有办法获取IFile类型的这个文件的句柄(org.eclipse.core.resources.IFile)?

我需要一个位于IFile类型的已安装的osgi包中的文件的引用。但我想要在我的本地磁盘上临时复制文件(如工作区)。

提前致谢!

2 个答案:

答案 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