How to read a directory from the runtime classpath?

classpath, java

Solution

You can use the `PathMatchingResourcePatternResolver` provided by Spring.

public class SpringResourceLoader {

    public static void main(String[] args) throws IOException {
        PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();

        // Ant-style path matching
        Resource[] resources = resolver.getResources("/myconfig/**");

        for (Resource resource : resources) {
            InputStream is = resource.getInputStream();
            ...
        }
    }
}

I didn't do anything fancy with the returned `Resource` but you get the picture.

Add this to your maven dependency (if using maven):

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-core</artifactId>
    <version>3.1.2.RELEASE</version>
</dependency>

Problem

My Java application needs to be able to find a `myconfig/` directory which will be bundled inside the same JAR: ``` myjar.jar/ com/ me/ myproject/ ConfigLoader.java --> looks for myconfig/ directory and its contents myconfig/ conf-1.xml conf.properties ... etc. ``` How do I actually go about reading this `myconfig/` directory off the runtime classpath? I've done some research and it seems that the normal method of reading a file from the classpath doesn't work for directories: ``` InputStream stream = ConfigLoader.class.getResourceAsStream("myconfig"); ``` So does anyone know how to read an entire directory from the runtime classpath (as opposed to a single file)? Thanks in advance! Please note: It is not possible to load the files individually, `myconfig` is a directory with thousands of properties files inside it.

Original source