关于class.getResourceAsStream(String name)与 class.getClassLoader().getResourceAsStream(String name)的路径name问题

关于class.getResourceAsStream(String name)与  class.getClassLoader().getResourceAsStream(String name)的路径name问题

首先用类加载资源文件的方式可以有以下三种:

(包结构图)

1)   InputStream inStream = DaoFactory.class.getResourceAsStream("dao.properties");

2)   inStream=DaoFactory.class.getResourceAsStream("/com/jdbc/dao/dao.properties")

3)   inStream=DaoFactory.class.getClassLoader().getResourceAsStream("com/jdbc/dao/dao.properties");

第一种和第二种方式是采用Class对象去加载,第三种采用ClassLoader对象去加载资源文件,之所以Class对象也可以加载资源文件是因为Class类封装的ClassLoader的getResourceAsStream方法。从Class类中的源码中可以看出:

之所以这样做无疑还是方便客户端的调用,省的每次获取ClassLoader才能加载资源文件的麻烦。

路径问题:

  1. 第三种是最本质的做法,前两种也是基于第三种去实现的。JVM会使用Bootstrap Loader去加载资源文件。所以路径还是这种相对于工程的根目录即"com/jdbc/dao/dao.properties"(不需要“/)
  2. 第一种是采用的相对路径,资源文件相对于当前这个类即(DaoFactory类)的位置,这种方式Class对象做了一些处理。即resloveName(name)这个方法。最终name还是会转换成适合第三方式的name参数
  3. 第二种是采用绝对路径,绝对路径是相对于classpath根目录的路径(工程里src目录对应bin目录(存放.class文件的目录))。

原文: http://www.iteye.com/topic/1021214

关于class.getResourceAsStream(String name)与 class.getClassLoader().getResourceAsStream(String name)的路径name问题

时间: 2024-11-11 15:22:31

关于class.getResourceAsStream(String name)与 class.getClassLoader().getResourceAsStream(String name)的路径name问题的相关文章

有关getClassLoader().getResourceAsStream(fileName)、class.getResourceAsStream(fileName)和().getContextClassLoader().getResourceAsStream(fileName)的区别

一:前言 在自己获取属性时,碰见了XX.class.getResourceAsStream(fileName),自己对这个其实不是很理解,上网查了下资料,又看到了上述的几个,所以就研究了下. 二:内容 先说说着几个区别吧 getClassLoader().getResourceAsStream("a.txt"):此方法的路径不管是绝对路径还是想对路径,都是从path下找得,即使"./a.txt"的形式去寻找,在此处我们要注意空指向异常的情况(可以看看这里写的http

this.class.getClassLoader().getResourceAsStream与this.class.getResourceAsStream

本文转自:http://xixinfei.iteye.com/blog/1256291 this.getClass().getClassLoader().getResource("template");  首先,调用对象的getClass()方法是获得对象当前的类类型,这部分数据存在方法区中,而后在类类型上调用getClassLoader()方法是得到当前类型的类加载器,我们知道在Java中所有的类都是通过加载器加载到虚拟机中的,而且类加载器之间存在父子关系,就是子知道父,父不知道子,

this.getClass().getClassLoader().getResourceAsStream(fileName)中的路径问题。(引用)

ClassLoader.readResourceAsStream 是从 classpath 中读取,也就是说目标资料必须在某个 classpath 节点路径中,比如在某个磁盘文件夹 bin 中或某个 jar 文件里面.放在 src 里面的话,eclipse 会自动在编译时默认地复制到 bin 目录下,当然你可以故意禁用这个默认功能(参数页中 Java > Compiler > Building 里面有个 Filtered Resources).eclipse 默认配置下你放在 src 下面就可

class.getClassLoader().getResourceAsStream(name)获取配置文件

最近做模拟登陆,需要加载一些配置文件,用到了class.getClassLoader().getResourceAsStream(name)方法来获取js文件数据流,读取相对路径文件一直是我苦恼的事情……在不断的百度百度中,终于有了一些结果. ClassLoader.getResourceAsStream()查找资源,是当前类编译为class文件后所在文件夹路径中查找,举例说明: 在PasswordUtil.java中调用md5.js文件获得密码加密结果(无用,可忽略) 编译class文件后存储

this.getClass().getClassLoader().getResourceAsStream()和this.getClass().getClassLoader().getResource()用法

this.getClass().getClassLoader().getResource() this.getClass().getClassLoader().getResourceAsStream() 专门用来 读取资源文件    test文件内容 测试类路径 测试文件路径 测试 类的根目录就是bin(专放class文件)  测试文件的也是在根目录的file文件 中 原文地址:https://www.cnblogs.com/xiaotong1223/p/9379056.html

C++命名空间和头文件的关系 例如已经使用了#include<string>,为什么还要 using std::string?

(1)如果C++程序中使用了带后缀".h"的头文件,那么不必在程序中声明命名空间,只需要文件中包含头文件即可:(2)C++标准要求系统提供的头文件不带后缀".h",但为了表示C++与C的头文件既有联系又有区别,C++中所用头文件不带后缀".h",而是在C语言的相应头文件名之前加上前缀c: (3)自定义的头文件通常带后缀“.h",系统标准库文件不带后缀“.h". (4)因为标准库非常的庞大,所程序员在选择的类的名称或函数名时就很

C++ string的那些坑,C++ string功能补充(类型互转,分割,合并,瘦身) ,c++ string的内存本质(简单明了的一个测试)

1. size_type find_first_of( const basic_string &str, size_type index = 0 ); 查找在字符串中第一个与str中的某个字符匹配的字符,返回它的位置.搜索从index开始,如果没找到就返回string::npos 2. string& replace (size_t pos, size_t len, const string& str); 从当前字符串的pos位置开始,长度为len的段落,替换成成str 3. in

C++读写TXT文件中的string或者int型数据以及string流的用法

对文件的读写操作是我们在做项目时经常用到的,在网上看了很多博客,结合自身的项目经验总结了一下,因此写了这篇博客,有些地方可能直接从别的博客中复制过来,但是都会注明出处. 一.文件的输入输出 fstream提供了三个类,用来实现c++对文件的操作.(文件的创建.读.写). ifstream -- 从已有的文件读入 ofstream -- 向文件写内容 fstream - 打开文件供读写 文件打开模式: ios::in             只读 ios::out            只写 io

【转】Java String对象的经典问题(new String())

public class Test { public static void main(String[] args) { String str = "abc"; String str1 = "abc"; String str2 = new String("abc"); System.out.println(str == str1); System.out.println(str1 == "abc"); System.out.p