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://
File
file://
File
我知道FileLocator
Eclipse 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,这应该可行.
干杯,詹斯
归档时间: |
|
查看次数: |
8031 次 |
最近记录: |