如何从文件加载资源包,而不是从jar,同一个包的基本名称加载资源包

时间:2015-03-17 17:52:44

标签: java resourcebundle urlclassloader

在文件系统和jar中都有相同基本名称的资源包。 尝试从文件系统加载资源包,而不是从jar。

URLClassLoader urlLoader = new URLClassLoader(new java.net.URL[]{filePathURL});
ResourceBundle bundle = ResourceBundle.getBundle( "my.bundle", locale, urlLoader );

捆绑包是从jar加载的,而不是从文件系统加载的。为什么? 如果我将bundle base name更改为my.foo.bundle(与jar中的bundle名称不同),它就可以了。但是文件系统和jar中的包名称是相同的。有办法吗?

感谢。

1 个答案:

答案 0 :(得分:1)

我认为这是因为URLClassLoader加载资源的方式。

如果是URLClassLoader:
每当请求资源时,它首先要求父类加载器加载它。如果该资源不可用,则检查子类加载器。


不确定这是否是最佳方式,但可能的解决方案:

1。使用构造函数

`public URLClassLoader(URL[] urls, ClassLoader parent)`

并为父

提供null

像这样:

URLClassLoader urlLoader = new URLClassLoader(new java.net.URL[]{filePathURL}, null);
ResourceBundle bundle = ResourceBundle.getBundle( "my.bundle", locale, urlLoader );

2. :扩展URLClassLoader并覆盖方法getResource方法,首先从类加载器加载:


public URL getResource(String name) {
    URL url = findResource(name); // this will load from your class loader
    if (url == null) {
        if (parent != null) {
            url = parent.getResource(name);
        } else {
            url = getBootstrapResource(name);
        }
    }

    return url;
}