2012-08-17 52 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

相關問題