[英]How to load resource bundle from file, not from jar, same bundle base name
文件系統和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)`
並為父母提供空
像這樣:
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;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.