5

I want to list all files with a specific name in the class path. I am expecting multiple occurrences, hence Class.getResource(String) will not work.

Basically I have to identify all files with a specific name (ex: xyz.properties) anywhere in the class path and then read the metadata in them cumulatively.

I want something of the effect Collection<URL> Class.getResources(String) but could not find anything similar.

PS: I don't have the luxury of using any third party libraries, hence in need of a home grown solution.

Shama
  • 165
  • 1
  • 7
  • 3
    this similar question can help you http://stackoverflow.com/questions/6730580/how-to-read-several-resource-files-with-the-same-name-from-different-jars – logoff Oct 09 '12 at 13:25

2 Answers2

5

You can use Enumeration getResources(String name) on the class loader to achieve the same.

For example:

Enumeration<URL> enumer = Thread.currentThread().getContextClassLoader().getResources("/Path/To/xyz.properties");
while (enumer.hasMoreElements()) {
    System.out.print(enumer.nextElement());
}
Ashwin Prabhu
  • 8,186
  • 5
  • 50
  • 76
  • Can you give an example how the OP should be using that. He wants to find all resources that match a pattern in the classpath. Just giving a link is IMO not sufficient as an answer. – maba Oct 09 '12 at 13:39
  • `ClassLoader#findResources()` is `protected`. – maba Oct 09 '12 at 13:45
  • @maba Thanks, I stay corrected. Guess I wasn't paying close attention to the API docs. BTW usage is pretty straightforward, but anyways I will edit my answer with a usage. – Ashwin Prabhu Oct 11 '12 at 11:17
2

What I do is I read java source files from classpath and process them using ClassLoader. I am using follwing code :

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
 }

Hope this helps you.

Nandkumar Tekale
  • 15,514
  • 7
  • 56
  • 85