9

デスクトップアプリケーションに Maven を使用しています。Maven標準ディレクトリレイアウトについて読みましたが、今のところこのプロジェクト構造があります:

App
|-- pom.xml
`-- src
    |-- main
        |-- java
        |   `-- java classes
        |-- resources
        |   `-- images
        |       `-- app images
        `--config
           `--config.xml

リソースと構成ファイルをロードする方法を見つけたいです。いくつかの記事とトピックを読んだところ、これが見つかりました(私のコードの単純化された例):

//class for loading config
public class Preferences {
    public Preferences() {
        InputStream image = Preferences.class.getResourceAsStream("images/image.png");
        InputStream config = Preferences.class.getResourceAsStream("config.xml");
    }        
}

ただし、イメージ変数と構成変数には null が含まれています。ロードのさまざまなバリエーションを試していました (ルート フォルダーから、Preferences.class の代わりに this.getClass() を使用するなど) が、常に null です。私はこのリソース読み込みシステムを本当に理解していません。また、それに関する適切なドキュメントも見つかりませんでした。誰かがこのメカニズムについて適切な説明をしてくれれば (または単にドキュメントへのリンクを提供してくれれば) いいでしょう。したがって、主な質問は次のとおりです。リソースと構成ファイルをロードするにはどうすればよいですか?

4

6 に答える 6

7

私は解決策を見つけたと思います。Juned Ahsan と mR_fr0g が書いているように、this.getClass().getResource() の代わりに ClassLoader クラスを使用する必要があります。ただし、リソースフォルダーに対してのみ機能します。ただし、maven では、他のフォルダーをリソース フォルダーとして追加できます。このセクションを pom.xml に追加する必要がありました。

<build>
    <resources>
        <resource>
            <directory>src/main/config</directory>
        </resource>
    </resources>
</build>

そして、動作するJavaコードは次のとおりです。

InputStream image = this.getClass().getClassLoader().getResourceAsStream("images/image.png");
InputStream config = ClassLoader.getSystemResourceAsStream("config.xml");
于 2013-05-04T12:53:45.267 に答える
3
public Preferences() {
    InputStream image = this.getClass().getClassLoader().getResourceAsStream("image.png");
    InputStream config = this.getClass().getClassLoader().getResourceAsStream("config.xml")
} 
于 2013-05-04T12:28:03.760 に答える
2

このアプローチを使用するのはどうですか:

InputStream file = ClassLoader.getSystemResourceAsStream("res.txt");

また

InputStream file = Thread.currentThread().getContextClassLoader().getResourceAsStream("MyProperty.properties");

現在そこにあるので、クラスパスの一番上にある MyProperty.properties ファイルを探します。これは、src/main/resources ディレクトリまたは他の src フォルダーにある可能性があります。これは、アプリケーション (jar/war) のビルド方法によって異なります。

jar を作成している場合は、それを解凍して、jar の最上位にあるプロパティ ファイルを確認できるはずです。war を構築している場合は、おそらく WEB-INF/classes ディレクトリにあるはずです。繰り返しますが、それはそれがどのように構築されたかによって異なります。

于 2013-05-04T12:28:01.020 に答える