簡體   English   中英

如何從不同的JAR中讀取多個具有相同名稱的資源文件?

[英]How to read several resource files with the same name from different JARs?

如果類路徑中有兩個JAR文件,則兩個JAR文件的根目錄中都包含名為“config.properties”的資源。 有沒有辦法檢索類似於getClass().getResourceAsStream() 兩個文件getClass().getResourceAsStream() 訂單無關緊要。

另一種方法是在類路徑中加載匹配某些標准的每個屬性文件,如果可能的話。

你需要ClassLoader.getResources(name)
(或靜態版本ClassLoader.getSystemResources(name) )。

但遺憾的是,資源不存在於“目錄”中,這是一個已知問題。 例如foo/bar.txt很好,但bar.txt可能有問題。 在Spring Reference中有很好的描述 ,盡管它絕不是Spring特有的問題。

更新:

這是一個返回InputStream列表的輔助方法:

public static List<InputStream> loadResources(
        final String name, final ClassLoader classLoader) throws IOException {
    final List<InputStream> list = new ArrayList<InputStream>();
    final Enumeration<URL> systemResources = 
            (classLoader == null ? ClassLoader.getSystemClassLoader() : classLoader)
            .getResources(name);
    while (systemResources.hasMoreElements()) {
        list.add(systemResources.nextElement().openStream());
    }
    return list;
}

用法:

List<InputStream> resources = loadResources("config.properties", classLoader);
// or:
List<InputStream> resources = loadResources("config.properties", null);

jar文件是zip文件。

使用java.util.zip.ZipFile打開該文件

然后枚舉其條目,查找所需的屬性文件。

當您有條目時,您可以使用.getInputStream()獲取其流

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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