クラスパスに2つのJARファイルがあり、どちらもルートに「config.properties」という名前のリソースが含まれている場合。 getClass().getResourceAsStream()
に似た両方ファイルを取得する方法はありますか?順序は関係ありません。
別の方法は、可能であれば、特定の基準に一致するクラスパス内のすべてのプロパティファイルをロードすることです。
必要です ClassLoader.getResources(name)
(または静的バージョン ClassLoader.getSystemResources(name)
)。
ただし、残念ながら、「ディレクトリ」内にないリソースには既知の問題があります。例えば。 foo/bar.txt
は問題ありませんが、bar.txt
問題になる可能性があります。これは Springリファレンスで詳しく説明されています ですが、Spring固有の問題ではありません。
更新:
InputStreamsのリストを返すヘルパーメソッドは次のとおりです。
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()を使用してそのストリームを取得できます。