this.getClass().getResourceAsStream()读入数据

转载 2017年02月27日 15:43:25

转载出处:传送门

JAVA里面对于类进行调用配置资源的文件数据,以this.getClass().getResourceAsStream()来读取比较合适。
路径采用相对路径直接可以从工程的path路径去找。主要问题是如果类中采用的是静态块的话,则该this.getClass()报错,因为读静态块时,可能该对象并为构造,所以用this来指向当前对象不行。
ClassLoader提供了两个方法用于从装载的类路径中取得资源:
  public URL getResource(String name);
  public InputStream getResourceAsStream(String name);
这里name是资源的类路径,它是相对与“/”根路径下的位置。getResource得到的是一个URL对象来定位资源,而getResourceAsStream取得该资源输入流的引用保证程序可以从正确的位置抽取数据。
举例说明:
  mypackage.Hello.class.getResourceAsStream("/config/config.ini");
从classpath下的config相对路径中读取config.ini
JAVA里面对于类进行调用配置资源的文件数据,以this.getClass().getResourceAsStream()来读取比较合适。

 

http://baoqiang2004.blog.163.com/blog/static/16819372920111130110722/
(1).new FileInputStream(“a.txt”)
那么,这个a.txt就应该在工程的根目录下.
(2).this.getClass().getClassLoader().getResourceAsStream(“a.txt”)
在bin目录下,或加载类的地方–包外
(3).this.getClass().getResourceAsStream(“a.txt”)
在bin目录下,或加载类的地方–包内
getResourceAsStream:其本质是,根据类所在的位置,去加载配置文件所在的位置,

 

http://ouyangfei0426.iteye.com/blog/1020232

http://blog.csdn.net/zhanghaipeng1989/article/details/19332489
Class.getResourceAsStream() 会指定要加载的资源路径与当前类所在包的路径一致。
例如你写了一个MyTest类在包com.test.mycode 下,那么MyTest.class.getResourceAsStream("name") 会在com.test.mycode包下查找相应的资源
如果这个name是以 '/' 开头的,那么就会从classpath的根路径下开始查找
1. Class.getResourceAsStream(String path) :
path 不以'/'开头时默认是从此类所在的包下取资源,以'/'开头则是从ClassPath(Src根目录)根下获取。
其只是通过path构造一个绝对路径,最终还是由ClassLoader获取资源。
    

http://hi.baidu.com/lzpsky/item/6ae30e5dec024c3494eb0526


工程的文件结构:
testjee
  src
      config
          config1.properties
      configproperty
          ConfigPropManage.java
          config2.properties
          config
              config4.properties
      config3.properties

代码:

package configproperty;
public class ConfigPropManage {
 private static ConfigPropManage instance = new ConfigPropManage();
 private ConfigPropManage() {
 }
 public static ConfigPropManage getInstance() {
  return instance;
 }
 
  public static void main(String[] args) {
  ConfigPropManage instance = ConfigPropManage.getInstance();

    //  当前包路径, 得到的是当前类class文件的URI目录。不包括自己
  //out: file:/D:/workplace-Ec/workspace_jee/testjee/bin/configproperty/
  System.out.println(instance.getClass().getResource(""));
    // 当前类路径, 得到的是当前的classpath的绝对URI路径
  //out: file:/D:/workplace-Ec/workspace_jee/testjee/bin/
  System.out.println(instance.getClass().getResource("/"));
  

 ////////////////////////////////////////////////config1.properties///////////////////////////////
  //不加“/”,则表示从当前类所在的包configproperty下查找该资源config/config1.properties。没找到.
  //out: 11:null
  System.out.println("11:"+instance.getClass().getResourceAsStream("config/config1.properties"));
  
  //加“/”,则表示从类路径下也就是从classes文件夹下查找资源,找到。
  //out: 12:java.io.BufferedInputStream@37a71e93
  System.out.println("12:"+instance.getClass().getResourceAsStream("/config/config1.properties"));
  
  //加“/”,则表示从类路径下也就是从classes文件夹下查找资源,没找到。
  System.out.println("13:"+instance.getClass().getResourceAsStream("/config1.properties"));
  
  //不加“/”,则表示从当前类所在的包configproperty下查找该资源config1.properties。没找到.
  System.out.println("14:"+instance.getClass().getResourceAsStream("config1.properties"));
  
  //加“/”,则表示从类路径下也就是从classes文件夹下查找资源,没找到。
  System.out.println("15:"+instance.getClass().getResource("/config1.properties")); 
  
  //不加“/”,则表示从当前类所在的包configproperty下查找该资源config1.properties。没找到.
  System.out.println("16:"+instance.getClass().getResource("config1.properties")); 
  
  //加“/”,则表示从类路径下也就是从classes文件夹下查找资源,没找到。
  //out: 17:file:/D:/workplace-Ec/workspace_jee/testjee/bin/config/config1.properties
  System.out.println("17:"+instance.getClass().getResource("/config/config1.properties")); 
  
  //不加“/”,则表示从当前类所在的包configproperty下查找该资源config/config1.properties。没找到.
  System.out.println("18:"+instance.getClass().getResource("config/config1.properties"));  
 

 ////////////////////////////////////////////////config2.properties//////////////////////////////////
  //加“/”,则表示从类路径下也就是从classes文件夹下查找资源,没找到。
  System.out.println("23:"+instance.getClass().getResourceAsStream("/config2.properties"));
  
  //文件名前不加“/”,则表示从当前类所在的包configproperty下查找该资源config2.properties。找到.
  //out: 24:java.io.BufferedInputStream@7c3df479
  System.out.println("24:"+instance.getClass().getResourceAsStream("config2.properties"));
  
  //加“/”,则表示从类路径下也就是从classes文件夹下查找资源,没找到。
  System.out.println("25:"+instance.getClass().getResource("/config2.properties")); 
  
  //文件名前不加“/”,则表示从当前类所在的包configproperty下查找该资源config2.properties。找到
  //out: 26:file:/D:/workplace-Ec/workspace_jee/testjee/bin/configproperty/config2.properties
  System.out.println("26:"+instance.getClass().getResource("config2.properties"));   

 

 ////////////////////////////////////////////////config3.properties/////////////////////////////////
    //加“/”,则表示从类路径下也就是从classes文件夹下查找资源config3,找到。
    //out: 33:java.io.BufferedInputStream@7106e68e
  System.out.println("33:"+instance.getClass().getResourceAsStream("/config3.properties"));
  
  //文件名前不加“/”,则表示从当前类所在的包configproperty下查找该资源config3.properties。没找到
  System.out.println("34:"+instance.getClass().getResourceAsStream("config3.properties"));
  
  //加“/”,则表示从类路径下也就是从classes文件夹下查找资源config3,找到。
  //out: 35:file:/D:/workplace-Ec/workspace_jee/testjee/bin/config3.properties
  System.out.println("35:"+instance.getClass().getResource("/config3.properties")); 
  
  //文件名前不加“/”,则表示从当前类所在的包configproperty下查找该资源config3.properties。没找到
  System.out.println("36:"+instance.getClass().getResource("config3.properties"));  

 

 ////////////////////////////////////////////////config4.properties////////////////////////////////////
  //不加“/”,则表示从当前类所在的包configproperty下查找该资源config/config4.properties。找到
  //out: 41:java.io.BufferedInputStream@7e6cbb7a
  System.out.println("41:"+instance.getClass().getResourceAsStream("config/config4.properties"));
  
  //加“/”,则表示从类路径下也就是从classes文件夹下查找资源config/config4.properties,没找到。
  System.out.println("42:"+instance.getClass().getResourceAsStream("/config/config4.properties"));
  
  //加“/”,则表示从类路径下也就是从classes文件夹下查找资源config4.properties,没找到。
  System.out.println("43:"+instance.getClass().getResourceAsStream("/config4.properties"));
  
  //文件名前不加“/”,则表示从当前类所在的包configproperty下查找该资源config4.properties。没找到
  System.out.println("44:"+instance.getClass().getResourceAsStream("config4.properties"));
  
  //加“/”,则表示从类路径下也就是从classes文件夹下查找资源,没找到。
  System.out.println("45:"+instance.getClass().getResource("/config4.properties")); 
  
  //文件名前不加“/”,则表示从当前类所在的包configproperty下查找该资源config4.properties。没找到
  System.out.println("46:"+instance.getClass().getResource("config4.properties")); 
  
  //加“/”,则表示从类路径下也就是从classes文件夹下查找资源,没找到。
  System.out.println("47:"+instance.getClass().getResource("/config/config4.properties")); 
  
  //不加“/”,则表示从当前类所在的包configproperty下查找该资源config/config4.properties。找到
  //out: 48:file:/D:/workplace-Ec/workspace_jee/testjee/bin/configproperty/config/config4.properties
  System.out.println("48:"+instance.getClass().getResource("config/config4.properties")); 

 }
 }


疑问:
      //如果类路径下的当前包有22.properties文件,则输出:6: file:/E:/myobject/myspider/build/classes/myspider/22.properties 
     //否者输出源文件下的22.properties文件的路径,则输出:6:file:/E:/myobject/myspider/src/myspider/22.properties 
    System.out.println("6:"+t.getClass().getResource("22.properties"));  
 
    //如果类路径下有11.properties文件,则输出7:file:/E:/myobject/myspider/build/classes/11.properties 
    //否者输出源文件下的11.properties文件的路径,则输出:7:file:/E:/myobject/myspider/src/11.properties 
    System.out.println("7:"+t.getClass().getResource("/11.properties"));


相关文章推荐

this.getClass().getResourceAsStream()读入数据

http://blog.sina.com.cn/s/blog_8af106960102v629.html http://imsnoweagle.blog.sohu.com/108...

ReadTxtFile this.getClass().getResourceAsStream("/ming.txt");

import java.io.*; class ReadTxt { public void ReadTxtFile() { String temp=""; BufferedReader b...

getClass().getResourceAsStream() .

src(源文件夹) ┃ ┣━11.properties ┃ ┗━myspider(myspider包)          ┃          ┣━22.properties      ...

Java 关于类型类、this.getClass()的理解

import java.io.*; import java.util.*; class test { public static void main (String[] args) throws...

Java在不同环境下获取当前路径的方法--this.getClass().getResource("")

1. 在Servlet/Filter等Servlet web环境中,只要获得javax.servlet.ServletContext类型,则可以通过 getRealPath("...") 获得路径。相...

this.class.getClassLoader().getResourceAsStream(path)

相信很多写过web项目的会对this.this.class.getClassLoader().getResourceAsStream(path)这段代码有疑惑。我们用这段代码可以获取在classpat...

this.getClass().getClassLoader().getResource("");

调用对象的getClass()方法是获得对象当前的类类型,这部分数据存在方法区中。         类类型上调用getClassLoader()方法是得到当前类型的类加载器。         我们知道...

this.class.getClassLoader().getResourceAsStream

this.class.getClassLoader().getResourceAsStream 博客分类:  java知识点   this.getClass().getCl...

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

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

super.getClass()与this.getClass()的问题

super.getClass()和this.getClass()
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:this.getClass().getResourceAsStream()读入数据
举报原因:
原因补充:

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