文件和bundleresource://网址

qua*_*lar 8 java url file eclipse-rcp

我一直在打破这个问题已经有一段时间了,现在无法找到解决这个问题的方法:

我有一个Eclipse RCP应用程序,它使用打包为jar的自定义库.从插件中,我在jar中调用一个方法.在这个方法中,我正在"获取"资源使用this.class.getResource(relPath),而是relPath我需要的文件的硬编码相对路径.这将返回一个URL我可以用来构建一个File.

现在,如果我不是从插件中调用此方法,而是从简单的Java程序中调用此方法,则此方法非常有效.区别:Eclipse RCP的类加载器返回一个不受支持URL的协议,而在运行一个简单的Java程序时,返回-URL,完全可以构造一个.bundleresource://Filefile://File

我知道FileLocatorEclipse SDK 的类 - 它将bundleresource-URLs解析为文件URL,但是我不能在库中使用它,因为我不想将它绑定到Eclipse RCP平台 - 应该可以使用它这个来自非Eclipse-RCP源的lib也是如此.

任何人都知道我如何从一个相对路径加载这个资源的方式,从Eclipse RCP-Plugin或任何其他客户端调用方法时都可以工作?

我需要File在这个相对路径的目录上构建一个来搜索其中的文件.我完全陷入了这个......

更新:如果除了使用File#list()以获取目录内容之外,这可能对我有帮助..

任何提示非常感谢,

Jen*_*ens 13

难道你不能简单地反转依赖.即,您的模块将URL检索为URL定义了一个接口

interface Locator { URL resolve(URL url); }
Run Code Online (Sandbox Code Playgroud)

并且您可以使用默认实现

class StandaloneLocator implements Locator {
   public URL resolve(URL url) { return url; }
}
Run Code Online (Sandbox Code Playgroud)

对于Eclipse,此默认定位器将替换为

class EclipseLocator implements Locator {
  public URL resolve(URL url) { return FileLocator.resolve(url); }
}
Run Code Online (Sandbox Code Playgroud)

现在,您的库与Eclipse没有依赖关系,您仍然可以使用FileLocator.由于您不会获得任何没有Eclipse的bundleresource-URLs,这应该可行.

干杯,詹斯