另一方面,项目中需要经常读取配置文件(properties文件),因此读取方法总结如下。
1、用java.util.Properties读取
1属性p=new属性(; 2 //p需要InputStream对象才能读取文件,但要获取InputStream,请输入通过3 //1、绝对路径:的inputstream is=new file inputstream (file 4 //2,class.getresourceasstream(path ); 5 //3,class loader.getresourceasstream (path );
6p.load(Inputstreamis ); 7 is.close (; 8p.getstring(string ) key ) ) )。
2、用java.util.ResourceBundle读取
resourcebundlerb=resource bundle.get bundle (package name;
Rb.getstring(stringkey );
二. Class.getResourceAsStream与class loader.getresourceasstream的区别
首先,Java的getResourceAsStream包括以下内容:
1.class.getresourceasstream (string path ) :如果path不以(/)开头,则缺省情况下将从此类所在的软件包中获取资源,或者从ClassPath根目录开始只要在path中创建绝对路径,最终ClassLoader就会获得资源。
2.class.getclass loader.getresourceasstream (string path ) :缺省情况下来自ClassPath根,path不能以)/)开头。 最终classloader将获得资源。
3.servlet context.getresourceasstream (string path ) :缺省情况下,从WebAPP根获取资源,path在Tomcat中为)/)开头无关紧要。 当然这涉及到具体的集装箱实现。
4. Jsp下的内置APP对象是上述servlet上下文的实现之一。
其次,getResourceAsStream的使用方法大致分为以下几种。
首先,要加载的文件和. class文件位于同一目录中。 例如,com.x.y下面是类me.class,它包含资源文件myfile.xml
那么,应该有以下代码。
me.class.getresourceasstream (' my file.XML );
第2,在me.class目录的子目录之下,例如,在com.x.y的下面有类me.class,在com.x.y.file目录之下有资源文件myfile.xml
那么,应该有以下代码。
me.class.getresourceasstream (' file/my file.XML );
第三,它不在me.class目录下,也不在子目录下。 例如,com.x.y下有类me.class,com.x.file目录下有资源文件myfile.xml
那么,应该有以下代码。
me.class.getresourceasstream (/com/x/file/my file.XML );
总结起来,可能只有两种写法
第一、前面有“/”
其中,/表示项目的根目录,例如,项目名称为myproject,/表示myproject
me.class.getresourceasstream (/com/x/file/my file.XML );
第二,前面没有“/”
表示当前类的目录
me.class.getresourceasstream (' my file.XML );
me.class.getresourceasstream (' file/my file.XML );
最后,自己的理解:
getResourceAsStream读取的文件路径仅限于项目的源文件夹、项目的src根目录下以及类包中的任意位置,但配置文件路径位于源文件夹以外的文件夹中
错误:
class.getClassLoader ().getresource('******* ' ); 此语句抛出空指针异常java.lang.NullPointerException,并定位为getClassLoader ()返回空值
如果某个类是用bootstrap加载的,则当我们在此类中获取classloader时,某些jdk实现会返回null。
解决方案:
将代码更改为以下内容:
InputStream inputStream;
class loader cl=XXX.class.getclass loader (; if (足球!=null ) {
inputstream=cl.getresourceasstream (xx.properties );
}else{
inputstream=class loader.getsystemresourceasstream (' xx.properties ' );
}
propertiesdbprops=new properties (;
dprops.load(Inputstream;
inputStream.close (;
所以以防万一,我们最好使用自己写的类获得classloader。 那样的话就没有问题了。