http://imsnoweagle.blog.sohu.com/108074172.htmljava里面对于类进行调用配置资源的文件数据,以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.iniJAVA里面对于类进行调用配置资源的文件数据,以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/19332489Class.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()读入数据