2010-06-02 15 views
5

Dosya adı verilen bir özellik dosyasının içeriğini öğrenmeye alışığım ve açıkçası MyClass.class.getResource ('*. Properties') çalışmayacak, ancak özellik dosyaları TÜM listesini nasıl edinebilirim sınıfımla aynı pakette yer alıyor mu?Bir pakette bulunan tüm özellik dosyalarını dinamik olarak yüklemek mümkün mü? yani, MyClass.class.getResource ('*. özellikler');

+0

kullandıysanız bunu şansımızı böylece bu, Bahar ile çok kolay, sana Bahar tabanlı bir cevap verebilir, ben yaptım nasıl. – skaffman

+3

Tamam ... bu mümkün olmadığını düşünmeye başlıyorum. Anlayışımdan, Java tembel sınıf yükünü kullanır ve bu nedenle sınıf yükleyici, bir sınıfa ulaşana kadar bir paketin içinde ne olduğunu bilmez. Gelebileceğim en yakın şey, bir paketin adını dizine çözümlemek için * girişimde bulunmaktır. dir dosyaları ve bunları class.getResource() aracılığıyla yüklemeye çalışın. Bunun bir hack olduğunu biliyorum; daha iyi bir yolu var mı – Stoney

+0

Aha! Bu işe yarayacak gibi geliyor, Bahar kullanan herhangi bir cevap oldukça kabul edilebilir ve çok takdir olurdu – Stoney

cevap

6

o JAR-ambalajlı olmadığını varsayarsak, bunun için File#listFiles() kullanabilirsiniz. İşte başlama örnek:

String path = MyClass.class.getResource("").getPath(); 
File[] propertiesFiles = new File(path).listFiles(new FilenameFilter() { 
    public boolean accept(File dir, String name) { 
     return name.endsWith(".properties"); 
    } 
}); 

o JAR-paketlenmiş var, o zaman JarFile API ile başlamak, biraz daha kod gerekir. this answer'da başka bir örnek bulabilirsiniz.

+0

Üzgünüm, Dosya izinsiz. Sınıf şu anda bir kavanozda değil ... ama geleceğin sınıfım için ne beklediğini bilmiyorum ve çevre üzerinde hiçbir kontrolüm yok. Bu yüzden mümkün olduğu kadar dekuple edilmesi gerekiyor – Stoney

+0

Üzgünüm ... Henüz cevap vermem için yeterli puanınız yok ... – Stoney

1

Bu

Class<? extends Object> clazz = AnyKnownClassInTheJar.class; 
String classFileName = clazz.getSimpleName() + ".class"; 
URL classResource = clazz.getResource(classFileName); 
if (!"jar".equals(classResource.getProtocol())) { 
    // Class not from JAR 
    return; 
} 
JarURLConnection classConnection = (JarURLConnection)classResource.openConnection(); 
JarFile jar = classConnection.getJarFile(); 
for (Enumeration<JarEntry> i = jar.entries(); i.hasMoreElements();) { 
    JarEntry entry = i.nextElement(); 
    if (entry.getName().endsWith(".properties")) { 
     // Load the property file 
    } 
} 
+0

Awesome! Bu, Android'de bile çalışır. Orada hileler classResource = AnyClassInTheApp.class.getResource ("/ AndroidManifest.xml") 'ile başlayacak. Kavanozda listelenen girişler APK içeriği olacaktır. – TWiStErRob

İlgili konular