クラスパスに2つのJARファイルがあり、どちらもルートに "config.properties"という名前のリソースが含まれている場合。 を取得する方法はありますかファイルはgetClass().getResourceAsStream()
に似ていますか?順序は関係ありません。異なる名前の複数のリソースファイルを異なるJARから読み取るにはどうすればよいですか?
クラスパス内のすべてのプロパティファイルをロードすることもできます。
クラスパスに2つのJARファイルがあり、どちらもルートに "config.properties"という名前のリソースが含まれている場合。 を取得する方法はありますかファイルはgetClass().getResourceAsStream()
に似ていますか?順序は関係ありません。異なる名前の複数のリソースファイルを異なるJARから読み取るにはどうすればよいですか?
クラスパス内のすべてのプロパティファイルをロードすることもできます。
あなたはClassLoader.getResources(name)
(または静的バージョンClassLoader.getSystemResources(name)
)が必要です。
残念ながら、「ディレクトリ」内にないリソースについては既知の問題があります。例えば。 foo/bar.txt
は問題ありませんが、bar.txt
に問題があります。これはdescribed well in the Spring Referenceですが、決してSpring固有の問題ではありません。
更新:
はここで、入力ストリームのリストを返すヘルパーメソッドです:
public static List<InputStream> loadResources(
final String name, final ClassLoader classLoader) throws IOException {
final List<InputStream> list = new ArrayList<InputStream>();
final Enumeration<URL> systemResources =
(classLoader == null ? ClassLoader.getSystemClassLoader() : classLoader)
.getResources(name);
while (systemResources.hasMoreElements()) {
list.add(systemResources.nextElement().openStream());
}
return list;
}
用途:
List<InputStream> resources = loadResources("config.properties", classLoader);
// or:
List<InputStream> resources = loadResources("config.properties", null);
jarファイルはzipファイルです。
を開き、[プロパティを探してそのエントリを列挙したいファイル
のjava.util.zip.ZipFile
を使用してファイル。エントリを取得すると、そのストリームを得ることができます.getInputStream()
クール。ありがとう! InputStreamを取得するためにそのURLを処理する方法の例を追加してください。 – Zeemee
@Mulmoth: 'URL'クラスには、そのURLのInputStreamを返す' openStream'メソッドがあります。それはあなたが必要とするものでなければなりません。 –
@Mulmothは私の更新を参照してください –