2011-07-18 26 views
28

Sınıf yolunda iki JAR dosyası varsa, her ikisi de kendi kökünde "config.properties" adlı bir kaynak içerir. getClass().getResourceAsStream()'a benzer her ikisi de dosya almanın bir yolu var mı? Sipariş uygun değil.Farklı JAR'lardan aynı ada sahip çeşitli kaynak dosyaları nasıl okunur?

Diğer bir seçenek, eğer mümkün ise, bazı özelliklerle eşleşen sınıf yolundaki her özellik dosyasını yüklemek olabilir.

cevap

24

ClassLoader.getResources(name)
(veya statik sürüm ClassLoader.getSystemResources(name)) gerekir.

Ancak maalesef "dizin" içinde olmayan kaynaklarla ilgili bilinen bir sorun var. Örneğin. foo/bar.txt iyi, ancak bar.txt bir sorun olabilir. Bu, described well in the Spring Reference olup, hiçbir şekilde Spring'e özgü bir sorun değildir.

Güncelleme:

İşte InputStreams listesini döndürür, yardımcı bir yöntem var:

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; 
} 

Kullanımı:

List<InputStream> resources = loadResources("config.properties", classLoader); 
// or: 
List<InputStream> resources = loadResources("config.properties", null); 
+0

Cool ile alabilirsiniz. Teşekkürler! Bir InputStream almak için bu URL'lere nasıl devam edeceğinize bir örnek ekleyebilir misiniz? – Zeemee

+1

@Mulmoth: "URL" sınıfının, bu URL için bir InputStream döndüren bir "openStream" yöntemi vardır. İhtiyacın olan her şey bu olmalı. –

+1

@Mulmoth Güncellememi görün –

0

kavanoz dosyaları zip dosyalarıdır.

Açık Sonra özellikleri arayan girdilerini numaralandırmak istediğiniz dosya

java.util.zip.ZipFile

kullanarak dosya.

Girdiye sahip olduğunuzda, akışını .getInputStream()

+1

Güzel bir fikir, ancak normalde koddaki jar dosyalarının yerini ve adını bilmiyorum. – Zeemee

+2

@Mulmoth evet yaparsınız: System.getProperty ("java.class.path") –

+0

@Sean Patrick Floyd: Tüm JAR dosyaları Sistem sınıfı yolunda değil. Örneğin, Web uygulamalarında, her türlü yerden geliyorlar. – Thilo

İlgili konular