如何从不同的JAR中读取多个具有相同名称的资源文件?

Zee*_*mee 33 java classpath

如果类路径中有两个JAR文件,则两个JAR文件的根目录中都包含名为"config.properties"的资源.有没有办法检索两个类似的文件getClass().getResourceAsStream()?订单无关紧要.

另一种方法是在类路径中加载匹配某些标准的每个属性文件,如果可能的话.

Sea*_*oyd 28

你需要 (或静态版本).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;
}
Run Code Online (Sandbox Code Playgroud)

用法:

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

  • @Mulmoth:URL类具有一个openStream方法,该方法返回该URL的InputStream。那应该是您所需要的。 (2认同)