12

我的 Java 应用程序需要能够找到myconfig/将捆绑在同一个 JAR 中的目录:

myjar.jar/
    com/
        me/
            myproject/
                ConfigLoader.java --> looks for myconfig/ directory and its contents
    myconfig/
        conf-1.xml
        conf.properties
        ... etc.

我实际上如何myconfig/从运行时类路径中读取这个目录?我做了一些研究,似乎从类路径读取文件的正常方法不适用于目录

InputStream stream = ConfigLoader.class.getResourceAsStream("myconfig");

那么有谁知道如何从运行时类路径(而不是单个文件)中读取整个目录?提前致谢!

请注意:无法单独加载文件,myconfig这是一个包含数千个属性文件的目录。

4

3 回答 3

13

您可以使用PathMatchingResourcePatternResolverSpring 提供的。

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();
            ...
        }
    }
}

我没有对退回的东西做任何花哨的事情,Resource但你明白了。

将此添加到您的 maven 依赖项(如果使用 maven):

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-core</artifactId>
    <version>3.1.2.RELEASE</version>
</dependency>
于 2012-08-17T14:01:36.153 回答
5

您可以调用ClassLoader.getResource()以查找目录中的特定文件(或目录本身,如果getResource()将返回目录)。getResource()返回指向结果的 URL。然后,您可以将此 URL 转换为其他库所需的任何形式。

于 2012-08-17T14:13:22.103 回答
0

诀窍似乎是类加载器可以在类路径中找到目录,而类不能。

所以这行得通

this.getClass().getClassLoader().getResource("com/example/foo/myconfig");

虽然这不是

this.getClass().getResource("myconfig");
于 2019-06-05T11:40:50.207 回答