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