name 如果是/开头, 把/去掉然后调用ClassLoader.getResourceAsStream(String name).
name 如果不是/开头, 增加当前 Class 对应的包目录, 然后调用`ClassLoader.getResourceAsStream(String name).
需要注意: name 必须是/分割的目录路径, 而不能是.分割的包路径
下面是 Class 类中去掉/以及增加当前 Class 对应包目录的方法, 假设 name 是: /aa/bb/cc.properties, 那么需要转成: aa/bb/cc.properties; 如果 name 是: cc.properties, 那么需要转成: aa/bb/cc.properties.
private String resolveName(String name) {
if (!name.startsWith("/")) {
Class<?> c = this;
while (c.isArray()) {
c = c.getComponentType();
}
String baseName = c.getPackageName();
if (baseName != null && !baseName.isEmpty()) {
name = baseName.replace('.', '/') + "/" + name;
}
} else {
name = name.substring(1);
}
return name;
}
URL ClassLoader.getResource(String name)
在 classpath 目录下找 name 的文件返回对应 URL.
InputStream ClassLoader.getResourceAsStream(String name)
在 classpath 目录下找 name 的文件返回 InputStream.
URL Class.getResource(String name)
name 如果是
/
开头, 把/
去掉然后调用ClassLoader.getResource(String name)
. name 如果不是/
开头, 增加当前 Class 对应的包目录, 然后调用ClassLoader.getResource(String name)
.InputStream Class.getResourceAsStream(String name)
name 如果是
/
开头, 把/
去掉然后调用ClassLoader.getResourceAsStream(String name)
. name 如果不是/
开头, 增加当前 Class 对应的包目录, 然后调用`ClassLoader.getResourceAsStream(String name).需要注意: name 必须是
/
分割的目录路径, 而不能是.
分割的包路径下面是 Class 类中去掉
/
以及增加当前 Class 对应包目录的方法, 假设 name 是: /aa/bb/cc.properties, 那么需要转成: aa/bb/cc.properties; 如果 name 是: cc.properties, 那么需要转成: aa/bb/cc.properties.