是否可以动态加载包中包含的所有属性文件?即MyClass.class.getResource('*。properties');

时间:2010-06-02 18:16:37

标签: java java-ee properties classpath classloader

我熟悉在给定文件名的情况下获取属性文件的内容,显然MyClass.class.getResource('*。properties')不起作用,但是如何获取所有属性的列表文件与我班级位于同一个包裹中?

3 个答案:

答案 0 :(得分:6)

假设它不是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开头。您可以在this answer中找到另一个示例。

答案 1 :(得分:3)

你可以用 Spring 做这些事情。在4. Resources4.7.2 Wildcards in application context constructor resource paths,特别是(或非常规?)(或主要是?)(或主要是?)。

答案 2 :(得分:1)

我就是这样做的,

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