我的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
是一个包含数千个属性文件的目录。
答案 0 :(得分:11)
您可以使用Spring提供的PathMatchingResourcePatternResolver
。
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>
答案 1 :(得分:4)
您可以调用ClassLoader.getResource()
来查找目录中的特定文件(或者目录本身,如果getResource()
将返回目录)。 getResource()
返回指向结果的URL。然后,您可以将此URL转换为其他库所需的任何形式。
答案 2 :(得分:0)
窍门似乎是类加载器可以在类路径中找到目录,而类不能。
这可行
this.getClass().getClassLoader().getResource("com/example/foo/myconfig");
这不是
this.getClass().getResource("myconfig");