簡體   English   中英

如何從文件而不是從jar加載資源束,具有相同的束基本名稱

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM