java资源加载

tips下。

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;

    }

猜你喜欢

转载自bucketli.iteye.com/blog/2204924