Properties properties = new Properties();  
 properties.load(new  InputStreamReader(CharactorTest.class.getResourceAsStream("/CustomValidationMessages.properties"), "UTF-8"));
 System.out.println(properties.getProperty("item.name.length.error"));
 
首先, 我们必须先了解根路径“/”是如何定义的,这对我们使用getResourceAsStream准确加载文件是很重要的。首先,我们要明白这个根路径是对应类所处类路径上的根目录!
/WEB-INF/classes
什么意思呢?假如一个项目经过编译之后生成了如下class文件和目录结构:
 
  1. com
  2. |-github
  3. |-demo
  4. |    |-A.class
  5. |    |-1.txt
  6. |-B.class
  7. |-2.txt
在这样的编译输出目录下,文件"1.txt"的绝对路径名为:"/com/github/demo/1.txt" 文件"2.txt"的绝对路径名为:"/com/github/2.txt
如同getResourceAsStream方法文档上的解释:以/开头时是绝对路径,与类路径不同的是路径上的“."换成了"/"。
 
接下着我们看相对路径!
 
首先我们必须明确“相对”路径总是指相对于当前class的路径!
 
例如,如果我们使用
 
InputStream is= A.class.getResourceAsStream("1.txt");
 
路径不是以/开头,说明这是一个相对路径,相对的是A.class这个文件,所以,这里的“1.txt”所指的正确位置是与A.class处于同一目录下的1.txt文件,这一文件是存在的,所引不会报错。
 
如果我们按相对路径的方式通过A去加载2.txt,则路径应该这样描述:
 
InputStream is= A.class.getResourceAsStream("../2.txt");   
 
是的,用“.."表示上一级目录。
 
如果我们按相对路径的方式通过B去加载1.txt,则路径应该这样描述:   
 
InputStream is= B.class.getResourceAsStream("demo/1.txt");   
 
注意!demo前是没有/的,这是一个相对路径,是相对于B所在包下的demo子包里的1.txt文件,所以这个路径也是正确无误的!

关于ClassLoader.getResourceAsStream

class.getResourceAsStream最终调用是ClassLoader.getResourceAsStream

只是在这之前对参数进行了调整。如果参数已/开头,则去除/,否则把当前类的包名加在参数的前面。

在使用ClassLoader.getResourceAsStream时,路径直接使用相对于classpath的绝对路径,并且不能已 / 开头。

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

关于Class.getResourceAsStream的更多相关文章

  1. Java中getResourceAsStream的用法

    首先,Java中的getResourceAsStream有以下几种: 1. Class.getResourceAsStream(String path) : path 不以'/'开头时默认是从此类所在 ...

  2. getResourceAsStream和getResource的用法及Demo实例

    用JAVA获取文件,听似简单,但对于很多像我这样的新人来说,还是掌握颇浅,用起来感觉颇深,大家最经常用的,就是用JAVA的File类,如要取得 D:/test.txt文件,就会这样用File file ...

  3. java classpath getResource getResourceAsStream

    1.classpath 用于指定java运行时,jvm寻找class文件以及jar文件的存储目录.jvm依据classpath中出现的jar文件以及目录,依次寻找,直到找到指定class文件. 例:j ...

  4. Java getResourceAsStream() 方法会缓存文件的问题

    xxx.getClass().getClassLoader().getResourceAsStream("d:/test-config.properties") 这方法确实会缓存文 ...

  5. Class和ClassLoader的getResourceAsStream区别

    这两个方法还是略有区别的, 以前一直不加以区分,直到今天发现要写这样的代码的时候运行 错误, 才把这个问题澄清了一下. 基本上,两个都可以用于从 classpath 里面进行资源读取,  classp ...

  6. ServletContext中常用方法(getRsource和getResourceAsStream)

    转自:http://blog.csdn.net/yakson/article/details/9203267 一..获取Tomcat的Context的初始化参数. 1.获取Tomcat的server. ...

  7. Class.getResourceAsStream() VS. ClassLoader.getResourceAsStream()

    For Class.getResourceAsStream(String name), if the name parameter doesn't start with a "/" ...

  8. class、classLoader的getResourceAsStream的区别

    1.class.getResourceAsStream() 从源码中可以看出他也是调用ClassLoader的getResourceAsStream() public InputStream getR ...

  9. [转]getResource()和getResourceAsStream以及路径问题

    原文链接:http://blog.sina.com.cn/s/blog_4b5bc0110100g22w.html 用JAVA获取文件,听似简单,但对于很多像我这样的新人来说,还是掌握颇浅,用起来感觉 ...

  10. Java getResourceAsStream返回为空的问题

    使用 getResourceAsStream("helloworld.propterties") 读取文件的stream,返回一直为空,试这把.properties文件放在 很多路 ...

随机推荐

  1. js金钱分割,正则

    ``` var test1 = '1234567890'var format = test1.replace(/\B(?=(\d{3})+(?!\d))/g, ',')"1,234,567, ...

  2. android EditText 限定中文个数与英文个数的解决方式

    EditText 限定中文8个英文16个的解决方法. 在EditText上控件提供的属性中有限定最大最小长度的方法. 可是,对于输入时,限定中文8个英文16个时,怎么办?相当于一个中文的长度是两个英文 ...

  3. Caffe模型读取

    caffe模型最终保存使用过的protobuf形式,将一个已经训练好的caffe模型读取出来,可以参考如下: 1,包含的头文件: #include <google/protobuf/io/cod ...

  4. Laravel5.1 模型 --一对多关系

    一对多关系算是比较常用的一种关联关系了,关于一对多我们可以用 文章对应评论 来举例:一篇文章可以有多个评论,但是一个评论只属于一篇文章. 这就是一对多关系. 1 实现一对多关系 我们先来准备两个模型, ...

  5. Web API 2中的操作结果

    how ASP.NET Web API converts the return value from a controller action into an HTTP response message ...

  6. Log4j 使用

    源博客 http://www.cnblogs.com/alipayhutu/archive/2012/06/21/2558249.html#3159794 [1]从零开始 a). 新建Java Pro ...

  7. hfut 1287

    http://acm.hfut.edu.cn/OnlineJudge/ 中文题. 区间线段树,需要剪枝.n的大小有问题. #include <iostream> #include < ...

  8. Gcc手册(转)

    手册链接地址:http://www.shanghai.ws/gnu/gcc_1.htm GCC中文手册 GCC现在是GNU中最主要和最流行的c & c++编译器. gcc/g++在执行编译工作 ...

  9. ES6学习笔记之变量声明let,const

    最近用淘宝的weex做了个项目,最近稍微闲下来了.正好很久没有接触RN了,所以趁这个机会系统的学习一下ES6的相关知识. 孔子说:没有对比就没有伤害.所以我们要拿ES6和ES5好好对比的学习.这样才能 ...

  10. jQuery之获取checkbox选中的值

    <mce:script src="jquery.js" mce_src="jquery.js"></mce:script><!-- ...