
com.star.io.resource.ClassPathResource Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of utils Show documentation
Show all versions of utils Show documentation
some utility class for java develop
The newest version!
package com.star.io.resource;
import com.star.clazz.ClassLoaderUtil;
import com.star.io.file.PathUtil;
import com.star.lang.Assert;
import com.star.string.StringUtil;
import java.net.URL;
import java.nio.file.Paths;
/**
* ClassPath单一资源访问类
* 传入路径path必须为相对路径,如果传入绝对路径,Linux路径会去掉开头的“/”,而Windows路径会直接报错。
* 传入的path所指向的资源必须存在,否则报错
*
* @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 pathBaseClassLoader 相对路径
* @param classLoader {@link ClassLoader}
* @param clazz {@link Class} 用于定位路径
*/
public ClassPathResource(String pathBaseClassLoader, ClassLoader classLoader, Class> clazz) {
super((URL) null);
Assert.notNull(pathBaseClassLoader, "Path must not be null");
this.path = normalizePath(pathBaseClassLoader);
this.classLoader = (classLoader != null) ? classLoader : ClassLoaderUtil.getClassLoader();
this.clazz = clazz;
initUrl();
}
// -------------------------------------------------------------------------------------- Constructor end
/**
* 获得Path
*
* @return path
*/
public final String getPath() {
return this.path;
}
/**
* 获得绝对路径Path
* 对于不存在的资源,返回拼接后的绝对路径
*
* @return 绝对路径path
*/
public final String getAbsolutePath() {
if (Paths.get(path).isAbsolute()) {
return this.path;
}
// url在初始化的时候已经断言,此处始终不为null
return PathUtil.getPath(url).normalize().toString();
}
/**
* 获得 {@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 NoResourceException("Resource of path [{}] not exist!", this.path);
}
}
@Override
public String toString() {
return (null == this.path) ? super.toString() : "classpath:" + this.path;
}
/**
* 标准化Path格式
*
* @param path Path
* @return 标准化后的path
*/
private String normalizePath(String path) {
// 标准化路径
path = Paths.get(path).normalize().toString();
path = StringUtil.removePrefix(path, StringUtil.SLASH, true);
Assert.isTrue(!Paths.get(path).isAbsolute(), "Path must be a relative path !");
return path;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy