在Eclipse插件中获取文件位置

在Eclipse插件中获取文件位置,eclipse,plugins,Eclipse,Plugins,我正在编写一个Eclipse插件,我想在其中读取项目中的一个文件并对其执行一些操作。 例如,该文件位于:projecttestplugin下,路径为:com/flow/FlowMain.java 我想以编程方式读取此文件并在其中添加一些代码。 我尝试的是: String base=Platform.getBundle(config.getPluginId()).getEntry(“/”).toString(); 字符串relativeUri=“com/flow/FlowMain.java”; 文

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

String base=Platform.getBundle(config.getPluginId()).getEntry(“/”).toString(); 字符串relativeUri=“com/flow/FlowMain.java”; 文件f=新文件(基本+相对值i)

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


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

'entry'是由equinox定义的协议,因此您可以使用org.eclipse.core.runtime.FileLocator.toFileURL(URL)获取真正的路径。

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

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

是的,你需要第二种从工作区根目录遍历的方法,而不是从包目录遍历。根据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数据文件夹中。请尝试下面的代码片段,它可以帮助您理解URL base=Platform.getBundle(“org.eclipse.equinox.p2.core”).getEntry(“osgi-INF/eventBus.xml”);系统输出打印项次(基本);System.out.println(FileLocator.toFileURL(base));