如果classpath中有两个JAR文件,它们的根目录都包含了一个名为“config.properties”的资源文件。是否有一种类似于getClass().getResourceAsStream()
的方法可以获取这两个文件?顺序不重要。
另一个选择是加载符合特定条件的类路径中的每个属性文件,如果可能的话。
您需要使用ClassLoader.getResources(name)
(或静态版本ClassLoader.getSystemResources(name)
)。
但是不幸的是,对于不在“目录”中的资源存在已知问题。例如,foo/bar.txt
没有问题,但是bar.txt
可能存在问题。这在Spring参考文档中有很好的描述,尽管这绝不是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()获取其流。
URL
类有一个openStream
方法,该方法返回该URL的InputStream。这应该是你所需要的全部内容。 - Luke Woodward