package com.xiaoleilu.hutool.io.resource; import java.net.URL; import com.xiaoleilu.hutool.io.IORuntimeException; import com.xiaoleilu.hutool.lang.Assert; import com.xiaoleilu.hutool.util.ClassUtil; /** * ClassPath资源访问类 * @author Looly * */ public class ClassPathResource extends UrlResource{ private String path; private ClassLoader classLoader; private Class<?> clazz; //-------------------------------------------------------------------------------------- Constructor start /** * 构造 * @param path 相对于ClassPath的路径 */ public ClassPathResource(String path) { this(path, null, null); } /** * 构造 * @param path 相对于ClassPath的路径 * @param classLoader {@link ClassLoader} */ public ClassPathResource(String path, ClassLoader classLoader) { this(path, classLoader, null); } /** * 构造 * @param path 相对于给定Class的路径 * @param clazz {@link Class} 用于定位路径 */ public ClassPathResource(String path, Class<?> clazz) { this(path, null, clazz); } /** * 构造 * @param path 相对路劲 * @param classLoader {@link ClassLoader} * @param clazz {@link Class} 用于定位路径 */ public ClassPathResource(String path, ClassLoader classLoader, Class<?> clazz) { super((URL)null); Assert.notNull(path, "Path must not be null"); this.path = path; this.classLoader = (classLoader != null ? classLoader : ClassUtil.getClassLoader()); this.clazz = clazz; initUrl(); } //-------------------------------------------------------------------------------------- Constructor end /** * 获得Path * @return path */ public final String getPath() { return this.path; } /** * 获得 {@link ClassLoader} * @return {@link ClassLoader} */ public final ClassLoader getClassLoader() { return this.classLoader; } /** * 根据给定资源初始化URL */ private void initUrl(){ if(null != this.clazz){ super.url = this.clazz.getResource(this.path); }else if(null != this.classLoader){ super.url = this.classLoader.getResource(this.path); }else{ super.url = ClassLoader.getSystemResource(this.path); } if(null == super.url){ throw new IORuntimeException("Resource of path [{}] not exist!", this.path); } } @Override public String toString() { return (null == this.path) ? super.toString() : "classpath:" + this.path; } }