this.getClass().getResource()对于路径会做处理(resolveName),区分相对路径和绝对路径
this.getClass().getClassLoader().getResource()即使用classloader进行资源加载则直接在当前classpath下寻找
另外如果某些资源在另外的classloader或者比当前类classloader更低级别的classloader(未知的或者自定义的)上加载,那么使用线程上下文加载器加载能比较好的解决问题。
所以一般加载资源的做法可以这样:
private static InputStream loadFile(String filePath) { //先使用当前类的类加载器查找资源 InputStream in = this.getClass().getClassLoader().getResourceAsStream(filePath); if(in==null) { //查找不到资源时,使用线程上下文的类加载器查找资源 in = Thread.currentThread().getContextClassLoader() .getResourceAsStream(filePath); } returnin; }