java读取Properties配置文件的方式有六种,这里我只写自己掌握的三种:通过java.lang.Class类的getResourceAsStream(String name) 方法来实现。
java代码:
InputStream in = getClass().getResourceAsStream("资源Name"); |
这句代码有点问题,那就是getClass()默认调用的的时候省略了this,而this不能在静态(static)方法或者静态块中使用,原因是static类型的方法或者代码块是属于类本身的,不属于某个对象,而this本身就代表当前对象,而静态方法或者块调用的时候是不用初始化对象的。
话不多说,上代码:
1 package com.qad.DButil; 2 3 import java.io.InputStream; 4 import java.util.Properties; 5 6 public class PropertyTest { 7 public static void main(String[] args) { 8 InputStream inputStream = Object.class.getResourceAsStream("/com/qad/properties/DBSource.properties"); 9 InputStream inputStream2 = PropertyTest.class.getResourceAsStream("/com/qad/properties/DBSource.properties");
//class.getClassLoader().getResourceAsStream()访问的是src目录下的文件,并且前面不能加'/' 10 InputStream inputStream3 = PropertyTest.class.getClassLoader().getResourceAsStream("DBSource.properties"); 11 Properties p = new Properties(); 12 try { 13 p.load(inputStream2); 14 inputStream2.close(); 15 } catch (Exception e1) { 16 e1.printStackTrace(); 17 } 18 System.out.println("ip:" + p.getProperty("db.url") + "port:" 19 + p.getProperty("port")); 20 } 21 22 }
这里实际上有三种实现方式,但是有一个需要注意的地方,当java文件和配置文件在src根目录下的时候,只需要'/'+文件名字.properties,当java文件和配置文件在同一个包内时,需要从项目根目录开始查找文件路径,例如上述路径/com/qad/properties/DBSource.properties,好了,这就是三种读取方式。
补充:class.getResourceAsStream()和class.getClassLoader().getResourceAsStream()的区别
1.class.getResourceAsStream()可以访问从classpath(src目录)下的所有文件;
2.class.getClassLoader().getResourceAsStream()访问的只能是classpath下的文件,并且文件名字前不能加'/',否则会报空指针异常。