this.class.getClassLoader().getResourceAsStream

转载 2016年12月02日 10:13:27

this.getClass().getClassLoader().getResource("template"); 
   首先,调用对象的getClass()方法是获得对象当前的类类型,这部分数据存在方法区中,而后在类类型上调用getClassLoader()方法是得到当前类型的类加载器,我们知道在Java中所有的类都是通过加载器加载到虚拟机中的,而且类加载器之间存在父子关系,就是子知道父,父不知道子,这样不同的子加载的类型之间是无法访问的(虽然它们都被放在方法区中),所以在这里通过当前类的加载器来加载资源也就是保证是和类类型同一个加载器加载的。 
最后调用了类加载器的getResourceAsStream()方法来加载资源。

===

JAVA运行时,首先会在指定的类路径下(classpath路径下)搜索JAVA编译后的字节码文件(class文件),然后通过类加载器加载到虚拟机中。 DBConn.class.getClassLoader().getResourceAsStream("database.properties") 1、DBConn.class得到表示DBConn类的Class对象,请参照JDK中对Class的说明http://wenku.baidu.com/view/1fa5e8ebe009581b6bd9ebe1.html。 2、通过Class的getClassLoader方法取得加载DBConn类的类加载器对象ClassLoader。 3、调用ClassLoader的getResourceAsStream方法从类加载路径取得文件的输入流(会通过当前的ClassLoader的findResource方法查找指定文件),请参照:http://download.oracle.com/javase/1.5.0/docs/api/java/lang/ClassLoader.html#getResourceAsStream%28java.lang.String%29

===

//下面的JdbcUtils.class后面少了个()吗?应该是都可以

   Properties prop = new Properties();
   prop.load(JdbcUtils.class.getClassLoader().getResourceAsStream("db.properties"));
   String driver = prop.getProperty("driver");
   Class.forName(driver);

====

  1. [原创]关于ClassName.class.getClassLoader的几点说明.    
  2. 经常希望通过ClassName.class.getClassLoader().getResourceAsStream(““)来取得properties文件.通常:ClassName.class.getClassLoader().getResourceAsStream(““)取得的是WEB-INF的下级目录,比如ClassName.class.getClassLoader().getResourceAsStream(“db.properties“).在Tomcat中,可以通过增加”../”来取得上层目录,即WEB-INF目录,这样就可以把properties放在WEB-INF中统一管理。但是WLS不识别”../”。   
  3. 另外一种土办法,就是不返回classLoader,直接ClassName.class.getResourceAsStream()。然后通过多个”../”(小于6个)来返回相应的上级目录。   
  4. 当然,如果类扩展了HttpServlet,可以通过getServletContext().getRealPath("/")来取得Web部署目录的绝对路径。

====

因此,直接调用 this.getClass().getResourceAsStream(String name);获取流,静态化方法中则使用ClassLoader.getSystemResourceAsStream(String name); 。

====

 在JDK中,getResourceAsStream是这样定义的:查找具有给定名称的资源。查找与给定类相关的资源的规则是通过定义类的 class loader 实现的。 
  因为我是用txt文件当作字典,它存在一个叫dict.aspactword的包下,这样一来,编译后的文件会储存在classPath下,而不是在src下,在动态向字典添加词的时候,classPath下的txt字典没有改变,相对在getResourceAsStream的时候,拿到的自然不是最新的字典,由此感叹,在classPath下如果有不需要改变的文件,在读取时用getResourceAsStream可以保持系统良好的统一性和可移植性,但是在需要改变它们的时候,一定注意修改的路径是classPath下的文件,否则就直接用文件系统的位置来维护你所需要的文件吧

====

常见的有以下两种获取资源文件的方法:

App.class.getClassLoader().getResourceAsStream(String name)

 

 

Returns an input stream for reading the specified resource.

The search order is described in the documentation for getResource(String).

 

默认从classpathe中找文件,name不能带“/”,否则会抛空指针

 

App.class.getResourceAsStream(String name):

 

查找资源通过给定名称,查询资源的规则与给定的类的class load来实现,这个方法由类的loader来执行,如果这个类由bootstrap加载,那么方法由ClassLoader.getSystemResourceAsStream代理执行。

 

代理之前,绝对的资源名称通过传入的name参数以下算法进行构造:

 

如果name以"/"开头,那么绝对路径是/后边跟的名字

如果name不是以"/"开头,那么绝对路径是package名"."换成“/”以后再加name,例如:

 

com.abc.App就是/com/abc/App/name

Sax 中 getResourceAsStream 读取src目录下以及WEB-INF目录下的XML写法

四种常见的XML解析方法,分别为:DOM、SAX、JDOM、Dom4j。 一、getResourceAsStream用法 首先,Java中的getResourceAsStream有...
  • Fly_Watermelon
  • Fly_Watermelon
  • 2016年03月03日 23:45
  • 1331

java中使用相对路径读取文件的写法总结 以及getResourceAsStream()

读取文件的写法,相对路径在当前的目录结构中读取test.txt的有三种写法 File file = new File("src/test.txt"); File file = new File(Te...
  • my__Sun_
  • my__Sun_
  • 2017年07月05日 15:03
  • 945

java项目中的路径控制 getResource()和getResourceAsStream以及路径问题

在Servlet应用中,有一个getRealPath(String str)的方法,这个方法尽管也可以动态地获得文件的路径,不秘直接手写绝对路径,但这也是一个不被建议使用的方法,那么,我们有什么方法可...
  • lifewinnerforever
  • lifewinnerforever
  • 2017年05月01日 23:12
  • 274

getResourceAsStream方法及缓存问题

首先,Java中的getResourceAsStream有以下几种:  1. Class.getResourceAsStream(String path) : path 不以’/'开头时默认是从此类所...
  • danchaofan0534
  • danchaofan0534
  • 2017年07月30日 20:37
  • 312

Java绝对/相对路径获取与getResourceAsStream()方法

Java路径   Java中使用的路径,分为两种:绝对路径和相对路径。具体而言,又分为四种:    一、URI形式的绝对资源路径   如:file:/D:/java/eclipse3...
  • zmx729618
  • zmx729618
  • 2016年04月13日 16:38
  • 20894

类加载器与 Class.getResourceAsStream 问题解决

通过理解 Java 和 Tomcat 的类加载器架构解决 getResourceAsStream 无法加载资源的问题。...
  • w1196726224
  • w1196726224
  • 2017年01月14日 20:11
  • 3454

Java 文本格式的解读_properties

1.  创建一个文本db.properties
  • cssdl
  • cssdl
  • 2014年09月02日 12:39
  • 284

关于Object.class.getResourceAsStream方法读取文件的使用

先附上代码。 package com.property; import java.io.FileNotFoundException; import java.io.IOException; imp...
  • qa275267067
  • qa275267067
  • 2018年01月04日 19:26
  • 43

java加载外部文件数据到代码中:外部数据文件放到jar包中,调用方法getResourceAsStream

任务要将数据文件geo.txt加载进行。因为是别人写的总体项目,不能乱动位置。只能将geo.txt打包到jar中某目录。比如,放到.class文件下怎么加载:http://riddickbryant....
  • longshenlmj
  • longshenlmj
  • 2014年12月10日 17:50
  • 2363

JDBC学习笔记(二):连接Oracle数据库(DriverManager)

首先,将连接数据库所需的 Driver,Url,Username,Password,等信息, 封装到一个properties文件中以方便调用。 新建一个操作数据库的工具类:DBTool。 在使用D...
  • dumzp13
  • dumzp13
  • 2016年03月24日 00:14
  • 226
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:this.class.getClassLoader().getResourceAsStream
举报原因:
原因补充:

(最多只允许输入30个字)