文件结构图:
以下为在多个场景下使用方式的代码:
package com.wenniuwuren.test;
/**
* 获取文件路径
* Created by wenniuwuren on 15/8/14.
*/
public class GetResourceTest {
public static void main(String[] args) {
// 带 “/” 的其实就是返回根目录
System.out.println("GetResourceTest.class.getResource(\"/\") -----> "
+ GetResourceTest.class.getResource("/"));
System.out.println("GetResourceTest.class.getResource(\"/DD.DD\") -----> "
+ GetResourceTest.class.getResource("/DD.DD"));
// *************************************************
// 返回当前路径
System.out.println("GetResourceTest.class.getResource(\"\") -----> "
+ GetResourceTest.class.getResource(""));
System.out.println("GetResourceTest.class.getResource(\"AA.AA\") -----> "
+ GetResourceTest.class.getResource("AA.AA"));
System.out.println("GetResourceTest.class.getResource(\"subtest/BB.BB\") -----> "
+ GetResourceTest.class.getResource("subtest/BB.BB"));
System.out.println("GetResourceTest.class.getResource(\"../CC.CC\") -----> "
+ GetResourceTest.class.getResource("../CC.CC"));
// 查找classloader root。 用 getClassLoader 最容易出问题, 因为是根据类加载器来的, 类加载器多种多样可能在不同环境下产生不同结果
GetResourceTest getResourceTest = new GetResourceTest();
System.out.println("getResourceTest.getClass().getClassLoader().getResource(\"\") -----> "
+ getResourceTest.getClass().getClassLoader().getResource(""));
System.out.println("getResourceTest.getClass().getClassLoader().getResource(\"/\") -----> "
+ getResourceTest.getClass().getClassLoader().getResource("/"));
/**
* 从输出结果来看总结上述: Class.class.getResource("/") == Class.getClass().getClassLoader().getResource("")
*/
// 这是一种可以避免在不同Web容器下获取路径异常的方法
System.out.println("GetResourceTest.class.getProtectionDomain().getCodeSource().getLocation().getPath() -----> "
+ GetResourceTest.class.getProtectionDomain().getCodeSource().getLocation().getPath());
}
}
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);
}public URL getResource(String name) {
URL url;
if (parent != null) {
url = parent.getResource(name);
} else {
url = getBootstrapResource(name);
}
if (url == null) {
url = findResource(name);
}
return url;
}版权声明:本文为博主原创文章,未经博主允许不得转载。
Class.getResource和ClassLoader.getResource区别与分析
原文:http://blog.csdn.net/wenniuwuren/article/details/48041019