12

myconfig/私のJavaアプリケーションは、同じ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()場合はディレクトリ自体)で特定のファイルを見つけるために呼び出すことができます。結果を指すURLを返します。次に、このURLを他のライブラリが必要とする形式に変換できます。getResource()getResource()

于 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 に答える