2012-08-17 3 views
11

私のJavaアプリケーションは、同じJAR内にバンドルされますmyconfig/ディレクトリを見つけることができるようにする必要があります。ランタイムクラスパスからディレクトリを読み取る方法は?

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

あなたは何をしようとしていますか? –

+0

私はそれを説明するために問題を簡素化しようとしています。 google [here](http://code.google.com/p/language-detection/)には 'langdetect'という名前のライブラリがあります。ライブラリには、すべての言語プロパティファイルをすべてランタイムクラスパスにロードするために使用する 'profiles'ディレクトリがあります。実行時に 'profiles /'ディレクトリを初期化するために 'DetectFactory.loadProfile(String)'メソッドを呼び出す必要があります。したがって、このディレクトリはクラスパス上にある必要があります。私はこれをabsファイルのパスに渡すとこれを動作させることができますが、最終的にはこれを同じJARの中にパッケージ化する必要があります。 – IAmYourFaja

+0

したがって、最終的には、 'DetectFactory.loadProfiles'を渡すだけで、同じJARの' profiles'ディレクトリにそれを指すStringを渡す必要があります。私の例は 'myconfig'ディレクトリを示していますが、本当に' profiles'です。それは 'ConfigLoader'を表示します。本当に' DetectFactory'です。 – IAmYourFaja

答えて

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

getResource()ディレクトリを返します場合、またはディレクトリ自体)あなたは、ディレクトリ内の特定のファイルを検索しClassLoader.getResource()を呼び出すことができます。 getResource()は結果を示すURLを返します。このURLを、他のライブラリに必要な形式に変換することができます。

+0

'getResource()'メソッドは実際にディレクトリを返します。 – jaco0646

関連する問題