gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 11:46:15 24 4
gpt4 key购买 nike

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

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

该包是从 jar 加载的,而不是从文件系统加载的。为什么?如果我将包基本名称更改为 my.foo.bundle(与 jar 中的包名称不同),它就起作用了。但文件系统和 jar 中的包名称是相同的。有办法吗?

谢谢。

最佳答案

我认为这是因为 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;
}

关于java - 如何从文件加载资源包,而不是从jar,相同的包基本名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29106303/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com