2011-10-10 10 views
7

getResourceAsStream()はjarファイルの外にあるファイルを見つけることができますか?

私は構成ファイルをロードするライブラリを使用するアプリケーションを開発しています。

InputStream in = getClass().getResourceAsStream(resource); 

次に、.jarファイルにパッケージされたアプリケーションです。 resource.jarファイルの中にある場合は、そのパスを"/relative/path/to/resource/resource"として指定することができます。

.jarファイルの外にリソースがあるかどうかを知りたいのですが、この場合はどのように指定すればいいですか?

(私のアプリケーションのjarがapp/にあり、リソースがapp/configにあると仮定します)。


プログラムは、3 rdパーティライブラリを使用します。 ライブラリーは、リソースを構成ファイルとして使用します。

また、jarファイルを常に解凍したり解凍したりせずに設定ファイルを微調整したいと思っています。

+0

のための絶対パスを指定してJVMに-Dconfig.locationを渡すことができますが、設定ファイルなどのリソースを使用しています(それはthridのパーティーの図書館です)。 jarファイルを常に解凍したり解凍したりすることなく、設定ファイルを微調整したい。実際に私はこれを別の方法で達成できるかどうか尋ねることを忘れていました:) – kunigami

+0

その情報は関連しているので、質問に編集しました。リソースを探す場所についてサードパーティAPIに(アプリなどによって)指示することはできますか?基本的に私が導いているのは、アプリに入れないことを示唆していることです。まったく同じですが、 'user.home'のサブディレクトリのような安定した再現可能なパスです。 –

+0

私はちょうど「アプレット」と言うビットに気づいた。これは実際にアプレットですか?それは事をさらに複雑にします。 –

答えて

8

一般的にはいできます。技術的には、クラスのClassLoaderは、パラメータ(see Javadoc here)に指定されたリソースの場所を特定するために使用されます。 ClassLoaderを特別に使用していない場合は、クラスパスを検索するブートストラップクラスローダーを取得します。そのため、クラスパス上にディレクトリや他のjarファイルがある場合、それらは検索されます。

1

これは、適切なクラスローダー(getClass().getClassLoader()が返すリソース)で使用できるリソースを取得します。クラスローダーにappディレクトリの両方が含まれているかどうかにかかわらず、jarファイルは残りのアプリケーションコンテキストに依存します。

関連する問題