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 getClass().getResourceAsStream()
? The order is not relevant.
An alternative would be to load every property file in the class path that match certain criterias, if this is possible at all.
This works when running inside and outside of a Jar file. PathMatchingResourcePatternResolver r = new PathMatchingResourcePatternResolver(); Resource[] resources = r. getResources("/myfolder/*"); Then you can access the data using getInputStream and the filename from getFilename .
jar ) contain your executable classes and resource files. A jar can also contain other jar files, which is useful when your program needs some library which is packaged in a jar.
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);
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With