zoukankan      html  css  js  c++  java
  • Class.getResourceAsStream和ClassLoader.getResourceAsStream方法

    项目中,有时候要读取当前classpath下的一些配置文件,下面介绍下Class.getResourceAsStream和ClassLoader.getResourceAsStream两种方法以及两者的区别。

    1. Class.getResourceAsStream

    首先, 我们必须先了解根路径“/”是如何定义的,这对我们使用getResourceAsStream准确加载文件是很重要的。

    首先,我们要明白这个根路径是对应类所处类路径上的根目录!什么意思呢?假如一个项目经过编译之后生成了如下class文件和目录结构:

    com  
       |-github  
              |-test  
              |    |-Test1.class  
              |    |-testdata1.txt  
              |-Test2.class  
              |-testdata2.tx2
    
    在这样的编译输出目录下,文件"testdata1.txt"的绝对路径名为:"/com/github/test/testdata1.txt" 文件"testdata2.txt"的绝对路径名为:"/com/github/testdata2.txt"
    如同getResourceAsStream方法文档上的解释:以/开头时是绝对路径,与类路径不同的是路径上的"."换成了"/"。

    如果使用eclipse,则如图:

    则classes这个目录下面为根目录。

    相对路径:相对”路径总是指相对于当前class的路径。

    例如:

    InputStream is= Test1.class.getResourceAsStream("testdata1.txt");  

    路径不是以/开头,说明这是一个相对路径,相对的是Test1.class这个文件,所以,这里的“testdata1.txt”所指的正确位置是与Test1.class处于同一目录下的testdata1.txt文件,这一文件是存在的,所引不会报错。

    如果我们按相对路径的方式通过Test1去加载testdata2.txt,则路径应该这样描述:

    InputStream is= Test1.class.getResourceAsStream("../testdata2.txt"); 
    

    用“.."表示上一级目录。

    如果我们按相对路径的方式通过Test2去加载testdata1.txt,则路径应该这样描述:   

    InputStream is= Test2.class.getResourceAsStream("test/testdata1.txt");  
    

    注意:test前是没有"/"的,这是一个相对路径,是相对于Test2所在包下的test子包里的testdata1.txt文件,所以这个路径也是正确无误的。

    不以"/"开头时默认是从此类所在的包下取资源,以"/"开头则是从ClassPath(Src根目录)根下获取。  

    2. ClassLoader.getResourceAsStream

    Class.getResourceAsStream最终调用是ClassLoader.getResourceAsStream

    在使用ClassLoader.getResourceAsStream时,路径直接使用相对于classpath的绝对路径,默认是从ClassPath根下获取,并且不能以"/"开头。

    有以下规则:
    1. 如果参数以"/"开头,则去除"/"。

    2. 否则把当前类的包名加在参数的前面。

    InputStream resourceAsStream = ClassLoader.getSystemResourceAsStream("com/github/demo/1.txt");
    

     

  • 相关阅读:
    “大型售票系统”和“真正的电商系统”在“库存”巨大的差异计算
    c#有关udp可靠传输(包传输数据包) 升级
    CreateCompatibleDC工作原理
    Android 内存管理 &Memory Leak & OOM 分析
    ubuntu文本界面乱码的中国解决方案
    hdu 4972 A simple dynamic programming problem(高效)
    java定义和实现接口
    HTTP 404
    pcre函数具体解释
    Android项目开发五-《星星生活志》1.使用MediaRecorder录制音频
  • 原文地址:https://www.cnblogs.com/lujiango/p/9674392.html
Copyright © 2011-2022 走看看