获得class或项目的内文件目录有多种种方式,
第一种,用Class.getResourceAsStream(String str);
等同于ClassLoader.getResourceAsStream(String str);
srt 的等于 null,
在web项目,和非jar项目想运行时,
str == null时
web项目 ClassLoader.getResourceAsStream 等于class根目录
查找具有给定名称的资源。查找与给定类相关的资源的规则是通过定义类的 class loader 实现的。此方法委托此对象的类加载器。如果此对象通过引导类加载器加载,则此方法将委托给 ClassLoader.getSystemResourceAsStream(java.lang.String)。
class与classLoader的 getResource对比。
System.out.println(SimpleMinaServer.class.getResource(""));
System.out.println(SimpleMinaServer.class.getResource("."));
System.out.println(SimpleMinaServer.class.getResource("/"));
System.out.println(SimpleMinaServer.class.getClassLoader().getResource(""));
System.out.println(SimpleMinaServer.class.getClassLoader().getResource("."));
System.out.println(SimpleMinaServer.class.getClassLoader().getResource("/"));
file:/G:/Work%20space/My%20Work%20space/j2ee/c5s_im(20130205)/bin/mima/service/
file:/G:/Work%20space/My%20Work%20space/j2ee/c5s_im(20130205)/bin/mima/service/
file:/G:/Work%20space/My%20Work%20space/j2ee/c5s_im(20130205)/bin/
file:/G:/Work%20space/My%20Work%20space/j2ee/c5s_im(20130205)/bin/
file:/G:/Work%20space/My%20Work%20space/j2ee/c5s_im(20130205)/bin/
null
总结,
null等于.
class等于class文件的目录
classLoader等于bin目录
/ 是返回顶级目录,所有class返回class文件的目录的上级,而classLoacer返回是null
下面代码主要是用于得到jar目录中的文件
getResourceAsStream方法的效果是差不多,只是得到的对应路径的输入流,
参数可以指定bin(在jar文件,jar文件等同于bin)目录下的资源,而这个路径是相对bin的路径
properties.load(this.getClass().getResourceAsStream("/port.properties"));
properties.load(new FileReader(new File(SimpleMinaServer.class.getResource("/port.properties").toURI())));
SimpleMinaServer.class.getProtectionDomain().getCodeSource().getLocation().getPath().replace("%20", " ")得到的jar目录
oadFilterConfig(filterProperties, ClassLoader.getSystemClassLoader());
loadFilterConfig(filterProperties, Thread.currentThread().getContextClassLoader());
jdbcUtils.loadDriverClass
Thread.currentThread().getContextClassLoader().loadClass(className);
Class.forName(className);