获取项目中文件路径
Class.getResource 与 ClassLoader.getResource
- 区别
方式 | 入参 | 返回 |
---|---|---|
Class.getResource() | 文件路径参数,绝对路径或相对路径(相对于该class类) | URL |
ClassLoader.getSystemResource() | 文件路径参数,相对路径(相对于项目的包的根目录来解析路径的) | URL |
- 联系
// Class.getResource 底层实现实质是调用 ClassLoader.getResource 方法
public java.net.URL getResource(String name) {
name = resolveName(name);
ClassLoader cl = getClassLoader0();
if (cl==null) {
// A system class.
return ClassLoader.getSystemResource(name);
}
return cl.getResource(name);
}
/**
* Add a package name prefix if the name is not absolute Remove leading "/"
* if name is absolute
*/
private String resolveName(String name) {
if (name == null) {
return name;
}
if (!name.startsWith("/")) {
Class c = this;
while (c.isArray()) {
c = c.getComponentType();
}
String baseName = c.getName();
int index = baseName.lastIndexOf('.');
if (index != -1) {
// 将文件路径信息中的.替换为/
// 即将com.study改为com/study
name = baseName.substring(0, index).replace('.', '/')
+"/"+name;
}
} else {
// 如果是以/开头,将绝对路径改为相对路径
name = name.substring(1);
}
// ClassLoader 解析文件的相对路径
return name;
}
- 示例
-
准备
-
代码
-
// Eclipse
// JDK 1.6
package com.study.test;
import java.net.U