【问题标题】:Get a file location in Eclipse Plugin在 Eclipse 插件中获取文件位置
【发布时间】:2010-09-18 10:01:40
【问题描述】:

我正在编写一个 Eclipse 插件,我想在其中读取项目中的文件并对其进行操作。 例如文件位于:项目 testplugin 和路径:com/flow/FlowMain.java 我想以编程方式读取此文件并在其中添加一些代码。 我尝试的是:

String base = Platform.getBundle(config.getPluginId()).getEntry("/").toString(); String relativeUri = "com/flow/FlowMain.java"; 文件 f = new File(base+relativeUri);

这显然失败了,因为“base+relativeUri”的值返回: entry://1079.fwk5184781/com/flow/FlowMain.java

那么我该如何从插件中获取完整的文件路径呢?

【问题讨论】:

标签: eclipse plugins


【解决方案1】:

'entry'是Equinox定义的协议,所以你可以使用org.eclipse.core.runtime.FileLocator.toFileURL(URL)获取真实路径。

【讨论】:

  • 从 Fabian 建议的帖子中,我正在尝试获取根工作区并找到实际文件。我得到一个 NPE 这样做。根工作区本身似乎为空。当我尝试 System.out.println(resourceInRuntimeWorkspace.getName()); 时我得到 NPE澄清我正在“作为 Eclipse 应用程序”运行此代码
  • 我面临的另一个问题是该文件位于项目文件夹中,因此路径应为“projectname”+/com/flow/FlowMain.java。现在如何获取当前项目的名称并将其附加到路径中?有没有办法从 IWorkspaceRoot 获得它?
  • 有一点需要注意,通过Platform.getBundle(config.getPluginId())获取的bundle实例就是你运行的目标平台的bundle。例如,它是您工作区中的插件项目。在eclipse中执行代码时可以得到项目文件夹的绝对路径。然而,它是目标平台中的一个 jar 文件,例如捆绑包“org.eclipse.core.runtime”。当您尝试获取其位置时,该 jar 将被提取到 osgi 数据文件夹。
  • 试试下面的代码sn-p,它可以帮助你理解,URL base = Platform.getBundle("org.eclipse.equinox.p2.core").getEntry("OSGI-INF/eventBus.xml "); System.out.println(base); System.out.println(FileLocator.toFileURL(base));
【解决方案2】:

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

String workSpaceRootpath=this.getClass().getProtectionDomain().getCodeSource().getLocation().getPath()+Relativepath of a file;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-11-10
    • 1970-01-01
    • 2021-04-06
    • 1970-01-01
    • 1970-01-01
    • 2020-09-05
    • 1970-01-01
    相关资源
    最近更新 更多