Можно ли динамически загружать все файлы свойств, содержащиеся в пакете? т.е. MyClass.class.getResource ('*. properties'); - PullRequest
5 голосов
/ 02 июня 2010

Я знаком с получением содержимого файла свойств по имени файла, и, очевидно, MyClass.class.getResource ('*. Properties') не будет работать, но как я могу получить список ВСЕХ свойств файлы, расположенные в том же пакете, что и мой класс?

Ответы [ 3 ]

6 голосов
/ 02 июня 2010

Предполагая, что это не JAR-пакет, вы можете использовать File#listFiles() для этого. Вот пример начала:

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

Если это JAR-пакет, то вам нужно немного больше кода, чтобы начать с JarFile API . Вы можете найти другой пример в этом ответе .

3 голосов
/ 02 июня 2010

Вы можете делать такие вещи с Spring . Смотри 4. Ресурсы , особенно (или вообще?) (Или принципиально?) (Или главным образом?) На 4.7.2 Подстановочные знаки в путях ресурсов конструктора контекста приложения .

1 голос
/ 03 июня 2010

Вот как я это сделал,

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