如何获取eclipse安装/插件目录或路径

如何获取eclipse安装/插件目录或路径,eclipse,Eclipse,如何通过swt/java编程获取Eclipse安装目录。 实际上,我想获得eclipse的插件目录。更新(2012年1月) 提到FAQ和API都很老了 现在,与不推荐使用的平台.resolve()相比,它更受欢迎 如图所示,您需要传递实际资源(此处为a),而不是资源的名称,以便解析它: private static URI locateFile(String bundle, String fullPath) { try { URL url = FileLocator.find(Pla

如何通过swt/java编程获取Eclipse安装目录。 实际上,我想获得eclipse的插件目录。

更新(2012年1月)
提到FAQ和API都很老了

现在,与不推荐使用的
平台.resolve()
相比,它更受欢迎

如图所示,您需要传递实际资源(此处为a),而不是资源的名称,以便解析它:

private static URI locateFile(String bundle, String fullPath) {
  try {
    URL url = FileLocator.find(Platform.getBundle(bundle), new Path(fullPath), null);
    if(url != null)
      return FileLocator.resolve(url).toURI();
  } catch (Exception e) {}
    return null;
  }
}
有关更多信息,请参见“”


原始答复(2011年1月)

也许FAQ“”可以在这里提供帮助:

通常应避免在运行时假设插件的位置。
要查找存储在插件安装目录中的资源(如图像),可以使用
平台
类提供的URL。这些URL使用一个特殊的Eclipse平台协议,但是如果您只使用它们来读取文件,这并不重要

在Eclipse 3.1及更早版本中,以下代码段在名为
sample.gif
的文件上打开一个输入流,该文件位于插件安装目录的子目录
icons

如果需要知道插件的文件系统位置,则需要使用
Platform.resolve(URL)
。此方法将平台URL转换为标准URL协议,如超文本传输协议(HTTP)或文件。
请注意,Eclipse平台没有指定插件必须存在于本地文件系统中,因此在将来的任何情况下,您都不能依赖此方法返回文件系统URL

在Eclipse 3.2中,首选的方法似乎是:


使用以下代码获取插件路径:

this.getClass().getProtectionDomain().getCodeSource().getLocation().getPath();

感谢以上,但我有一个疑问。考虑我有一个插件项目名为COM.AbHeHek.HTML.Testand里面有一个文件夹名为HTML携带很少的HTML文件。现在我想阅读这些html插件,然后我应该遵循哪种方法。它在本地工作,但插件如何检测名为html的文件夹?@Abhishek:我不确定“它在本地工作”。而不是什么配置呢?因为您的程序应该能够通过获取捆绑包并使用
FileLocator
来检测插件中的
html
文件夹。如果插件中不存在
html
,它应该返回null(或者抛出一个异常,我忘了是哪个异常)。3.[1,2]是古老的-为什么不谈谈最近的版本?它建议使用Platform.resolve,但Platform.resolve被标记为“不推荐使用。请改用FileLocator.resolve(URL)”以及为什么FAQ会说“首选方法似乎是”?“为什么要用这种含糊不清的语言来形容呢?”詹姆斯穆尔:说得对。我更新了答案,以反映正确的API,并添加了对示例的引用。“this”对象是什么类?这是使用上述代码的用户定义的类对象。例如,如果您有一个类Myclass.java,则可以像“Myclass.Class.getClass().getProtectionDomain().getCodeSource().getLocation()一样使用上述代码.getPath();”
  Bundle bundle = Platform.getBundle(yourPluginId);
  Path path = new Path("icons/sample.gif");
  URL fileURL = FileLocator.find(bundle, path, null);
  InputStream in = fileURL.openStream();
this.getClass().getProtectionDomain().getCodeSource().getLocation().getPath();