如果类路径中有两个JAR文件,则两个JAR文件的根目录中都包含名为“config.properties”的资源。有没有办法检索与getClass().getResourceAsStream()
类似的两个文件?订单无关紧要。
另一种方法是在类路径中加载匹配某些标准的每个属性文件(如果可能的话)。
答案 0 :(得分:27)
您需要ClassLoader.getResources(name)
(或静态版本ClassLoader.getSystemResources(name)
)。
但不幸的是,资源不存在于“目录”中,这是一个已知问题。例如。 foo/bar.txt
很好,但bar.txt
可能是个问题。这是described well in the Spring Reference,虽然它绝不是特定于Spring的问题。
<强>更新强>
这是一个返回InputStreams列表的辅助方法:
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);
答案 1 :(得分:0)
jar文件是zip文件。
使用java.util.zip.ZipFile
打开文件然后枚举其条目以查找所需的属性文件。
当您有条目时,您可以使用.getInputStream()
获取其流