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.
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());
}
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With