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

前端 未结 2 1531
鱼传尺愫
鱼传尺愫 2020-12-28 14:16

If there are two JAR files in the classpath, both containing a resource named \"config.properties\" in its root. Is there a way to retrieve both files similar to

2条回答
  •  慢半拍i
    慢半拍i (楼主)
    2020-12-28 14:51

    You need ClassLoader.getResources(name)
    (or the static version ClassLoader.getSystemResources(name)).

    But unfortunately there's a known issue with resources that are not inside a "directory". E.g. foo/bar.txt is fine, but bar.txt can be a problem. This is described well in the Spring Reference, although it is by no means a Spring-specific problem.

    Update:

    Here's a helper method that returns a list of InputStreams:

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

    Usage:

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

提交回复
热议问题