zoukankan      html  css  js  c++  java
  • JAVA类加载器二 通过类加载器读取资源文件

    一、getResourceAsStream方法

    getResourceAsStream方法实现如下:

        public InputStream getResourceAsStream(String name) {
            URL url = getResource(name);
            try {
                return url != null ? url.openStream() : null;
            } catch (IOException e) {
                return null;
            }
        }

    可见getResourceAsStream方法中调用了getResource方法来查找指定的资源。

    再看getResource的源代码:

        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;
        }
    

    因为Bootstrap是顶层的classloader,所以java中定义它的parent为null。

    此处先判断parent是不是null,如果parent不是null说明这个class的ClassLoader不是boostrap。

    另外通过parent.getResource(name);这一句发现classloader会一直调用它的父类的getResource方法,这和classloader的父类加载机制是一致的。

    换句话说,读取资源文件的时候,目录的搜索顺序是

    JRE/lib/rt.jar 注意,搜索的是jar包内的内容,jar包外面的同级目录不在搜索范围内

    JRE/lib/ext/*.jar

    Classpath目录

    而且,如果上级路径和下级路径如果同时存在要搜索的资源,那么将以上级路径下的资源作为搜索结果。

    示例:

    		InputStream in = QuickStart.class.getClassLoader().getResourceAsStream("haha.txt");
    		InputStreamReader isr = new InputStreamReader(in);
    		BufferedReader br =new BufferedReader(isr);
    		String s = null;
    		while(null != (s = br.readLine())){
    			System.out.println(s);
    		}
    

    对于多线程写法,要用下面的线程上下文的方式读取:

    InputStream in = Thread.currentThread().getContextClassLoader().getResourceAsStream("haha.txt");

  • 相关阅读:
    如何画出高级感的曼哈顿图,Manhattan++工具介绍
    Failed to open .vcf.gz: could not load index
    Mouse Genome Informatics(MGI)数据库介绍
    JZ落选跟我们有什么关系
    GenTree:基因进化和功能分析
    对性染色体进行关联分析
    媲美GWAS Catalog,囊括45万人数据,778个表型,3千万个位点的公共数据库:GeneATLAS
    DDD理论学习系列(11)-- 工厂
    RabbitMQ知多少
    DDD理论学习系列(10)-- 聚合
  • 原文地址:https://www.cnblogs.com/byron0918/p/5770684.html
Copyright © 2011-2022 走看看