Java 如何用指定的名称定位类路径中的所有资源?

Java 如何用指定的名称定位类路径中的所有资源?,java,Java,我想列出类路径中具有特定名称的所有文件。我期望多次出现,因此Class.getResource(String)将无法工作 基本上,我必须在类路径的任何位置识别具有特定名称(例如:xyz.properties)的所有文件,然后累积读取其中的元数据 我想要一些有效的Collection Class.getResources(String),但找不到类似的东西 PS:我没有使用任何第三方库的奢侈,因此需要一个自主开发的解决方案。您可以在类加载器上使用以实现同样的效果 例如: Enumeration&l

我想列出类路径中具有特定名称的所有文件。我期望多次出现,因此
Class.getResource(String)
将无法工作

基本上,我必须在类路径的任何位置识别具有特定名称(例如:xyz.properties)的所有文件,然后累积读取其中的元数据

我想要一些有效的
Collection Class.getResources(String)
,但找不到类似的东西

PS:我没有使用任何第三方库的奢侈,因此需要一个自主开发的解决方案。

您可以在类加载器上使用以实现同样的效果

例如:

Enumeration<URL> enumer = Thread.currentThread().getContextClassLoader().getResources("/Path/To/xyz.properties");
while (enumer.hasMoreElements()) {
    System.out.print(enumer.nextElement());
}
Enumeration enumer=Thread.currentThread().getContextClassLoader().getResources(“/Path/To/xyz.properties”);
while(enumer.hasMoreElements()){
System.out.print(enumer.nextElement());
}

我要做的是从类路径读取java源文件,并使用。我使用以下代码:

ClassLoader classLoader = Thread.currentThread().getContextClassLoader();

assert (classLoader != null);

// pkgName = "com.comp.pkg"
String path = pkgName.replace('.', '/');

// resources will contain all java files and sub-packages
Enumeration<URL> resources = classLoader.getResources(path);

 if(resources.hasMoreElements()) {
        URL resource = resources.nextElement();     
        File directory = new File(resource.getFile());
        // .. process file, check this directory for properties files
 }
ClassLoader ClassLoader=Thread.currentThread().getContextClassLoader();
断言(classLoader!=null);
//pkgName=“com.comp.pkg”
字符串路径=pkgName.replace('.','/');
//资源将包含所有java文件和子包
枚举资源=classLoader.getResources(路径);
if(resources.hasMoreElements()){
URL resource=resources.nextElement();
文件目录=新文件(resource.getFile());
//..进程文件,请检查此目录中的属性文件
}

希望这对您有所帮助。

这个类似的问题可以帮助您,您可以举例说明OP应该如何使用它。他希望在类路径中找到与模式匹配的所有资源。仅仅给出一个链接是不够的。
ClassLoader#findResources()
受到
保护
@maba谢谢,我一直在纠正。我想我没有密切关注API文档。顺便说一句,用法非常简单,但无论如何,我会用用法编辑我的答案。