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

梦想的初衷 提交于 2019-11-30 04:16:50

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<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;
}

Usage:

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

jar files are zip files.

Open the file using java.util.zip.ZipFile

Then enumerate its entries looking for the properties file you want.

When you have the entry you can get its stream with .getInputStream()

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!