加载所有jar包下指定文件:
如spring中加载 META-INF/spring.handlers 加载
org.springframework.core.io.support.PropertiesLoaderUtils#loadAllProperties(java.lang.String, java.lang.ClassLoader)
/** * Load all properties from the specified class path resource * (in ISO-8859-1 encoding), using the given class loader. * <p>Merges properties if more than one resource of the same name * found in the class path. * @param resourceName the name of the class path resource * @param classLoader the ClassLoader to use for loading * (or {@code null} to use the default class loader) * @return the populated Properties instance * @throws IOException if loading failed */ public static Properties loadAllProperties(String resourceName, @Nullable ClassLoader classLoader) throws IOException { Assert.notNull(resourceName, "Resource name must not be null"); ClassLoader classLoaderToUse = classLoader; if (classLoaderToUse == null) { classLoaderToUse = ClassUtils.getDefaultClassLoader(); } Enumeration<URL> urls = (classLoaderToUse != null ? classLoaderToUse.getResources(resourceName) : ClassLoader.getSystemResources(resourceName)); Properties props = new Properties(); while (urls.hasMoreElements()) { URL url = urls.nextElement(); URLConnection con = url.openConnection(); ResourceUtils.useCachesIfNecessary(con); InputStream is = con.getInputStream(); try { if (resourceName.endsWith(XML_FILE_EXTENSION)) { props.loadFromXML(is); } else { props.load(is); } } finally { is.close(); } } return props; }
事例:
public static void main(String[] args) { String handlerMappingsLocation = "META-INF/spring.handlers"; try { Properties properties = PropertiesLoaderUtils.loadAllProperties(handlerMappingsLocation, BeanUtil.class.getClassLoader()); Enumeration<?> enumeration = properties.propertyNames(); while (enumeration.hasMoreElements()) { String key = (String) enumeration.nextElement(); System.out.println(key); } } catch (IOException e) { e.printStackTrace(); } }
核心语法:
ClassLoader.getSystemResources(resourceName)