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. php 、asp、 java、 c#、 delphi之间的语言对照

    PHP是一种跨平台的server端的嵌入式脚本语言.它大量地借用C,Java和Perl语言的语法, 并耦合PHP自己的特性,使WEB开发人员能够高速地写出动态产生页面. 它支持眼下绝大多数数据库. 另 ...

  2. Struts2 是什么?

    Struts2是流行和成熟的基于MVC设计模式的Web应用程序框架. Struts2不只是Struts1下一个版本,它是一个完全重写的Struts架构. WebWork框架开始以Struts框架为基础 ...

  3. matlab小数分数转换

    >> format short      %%%% MATLAB默认格式,小数显示 >> format rat    %%%%% 转成分数表示

  4. 现代 PHP 新特性系列

    生成器的创建和使用 http://laravelacademy.org/post/4317.html

  5. sql 分组后查询最大所有列信息

    CREATE TABLE students (course varchar(10), stu_name varchar(10), city varchar(10), score int ) inser ...

  6. tf.name_scope()和tf.variable_scope()

    https://blog.csdn.net/gqixf/article/details/80191918 https://blog.csdn.net/uestc_c2_403/article/deta ...

  7. 【BZOJ4245】[ONTAK2015]OR-XOR 贪心

    [BZOJ4245][ONTAK2015]OR-XOR Description 给定一个长度为n的序列a[1],a[2],...,a[n],请将它划分为m段连续的区间,设第i段的费用c[i]为该段内所 ...

  8. 关于微信小程序下拉出现三个小点

    包子这天看美团外卖的小程序,再瞅瞅自己的背景色,发现,美团下拉的时候有三个小点,但是我自己的校车徐下拉的时候没有三个小点,很是郁闷,于是各种的找各种的找,发现,这三个小点是微信小程序自带的,你只需要设 ...

  9. android菜鸟学习笔记28----Android中的Service生命周期及本地和远程服务绑定的实现

    Service是Android中长期在后台运行的没有界面的组件,使用服务的优势在于:能够提高进程的优先级,系统不容易回收掉进程,即便回收了,内存充足的时候,会把进程重新创建. 1.服务的简单使用示例: ...

  10. 《挑战程序设计竞赛》2.1 穷竭搜索 POJ2718 POJ3187 POJ3050 AOJ0525

    POJ2718 Smallest Difference Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 6509   Acce ...