2012-08-17 113 views
11

我的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/关闭目录的运行时类路径?我做了一些研究,似乎从classpath中读取文件正常方法不适用于目录工作:

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

因此,没有人知道如何从读取整个目录运行时类路径(而不是单个文件)?提前致谢!

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

+0

你想做什么? – 2012-08-17 13:51:23

+0

为了解释它,我试图简化问题。在google [这里](http://code.google.com/p/language-detection/)上有一个名为'langdetect'的库。该库附带一个'profiles'目录,用于将每个语言属性文件加载到运行时类路径中。在运行时你需要调用一个'DetectFactory.loadProfile(String)'方法来初始化'profiles /'目录。所以这个目录需要在类路径上。当我将它传递给一个abs文件路径时,我可以得到这个工作,但最终需要将它封装在同一个JAR中。 – IAmYourFaja 2012-08-17 13:55:04

+0

因此,最终,我只需要传递'DetectFactory.loadProfiles'字符串,将它指向同一个JAR中的'profiles'目录。所以,而我的例子显示'myconfig'目录,它真的'配置文件'。它显示'ConfigLoader',它真的是'DetectFactory'。 – IAmYourFaja 2012-08-17 13:56:53

回答

10

您可以使用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> 
4

你可以称之为ClassLoader.getResource()找到目录的特定文件(或目录本身,如果getResource()将返回目录)。 getResource()返回一个指向结果的URL。然后,您可以将此URL转换为其他库需要的任何形式。

+0

'getResource()'方法事实上返回目录。 – jaco0646 2016-06-01 00:38:32

相关问题