在后面学习框架以及JDBC的过程中,经常会接触到properties配置文件,所以在这里专门用一篇博客来总结配置文件的用法。
properties主要用于读取Java配置文件,各种语言都有自己支持的配置文件,配置文件其实就是为了让用户能够脱离代码本身去修改一些变量的值,具有更大的灵活性。
针对变量和变量的值,那么需要存储的是变量和变量值这种键值对的形式,所以Properties继承了Hashtable,一个变量对应一个值。
先来看看提供的几个常用方法:
- getProperty(String key) : 用于指定的键在此属性列表中搜索属性。也就是说,通过参数key,得到key所对应的value。
- load(InputStream in) : 从输入流中读取属性列表(键和元素对),通过对指定文件进行装载来获取文件中的所有键值对。
- setProperty(String key,String value) : 调用Hashtable的方法put,通过调用基类的put方法来设置键值对。
- store(OutputStream out,String commants) : 以适合使用load方法加载到Properties表中的格式。将此Properties表中的属性列表(键和元素对)写入输出流,与load相反,该方法将键值对写入到指定的文件中
- clear( ) : 清除所有装载的键值对,该方法在基类中提供
下面通过代码演示用法
从配置文件读
在资源文件下创建该配置文件,配置文件的内容:
要把这三个变量的值读入
代码如下:
public class testProperties {
private static String name;
private static String password;
private static String version;
static {
try {
readProperties();
} catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
System.out.println(name);
System.out.println(password);
System.out.println(version);
}
public static void readProperties() throws IOException {
Properties properties = new Properties();
InputStream inputStream = Thread.currentThread().getContextClassLoader().getResourceAsStream("haha/test.properties");
properties.load(inputStream);
name = properties.getProperty("db.name");
password = properties.getProperty("db.password");
version = properties.getProperty("app.version");
}
}
代码比较简单,没有添加注释,在这里做大概介绍。代码中写了一个readProperties方法,该方法中实例化了Properties对象,然后加载路径文件中的信息,最后获取每一个属性的值。写完这个方法后,在静态代码块中调用该方法,相当于在类加载的时候就给这些属性进行了赋值。 最后打印了这三个属性进行验证。
需要注意的有以下几点:
- 读入配置的方法应该放在静态代码块中,这样类加载的时候就可以给属性进行赋值。
- 在读入properties文件的时候,会报路径的异常,所以这块需要将这个获取流的方法作为固定用法记下来。
Thread.currentThread().getContextClassLoader().getResourceAsStream("haha/test.properties");
往配置文件写
用到最多的就是读文件,但是写入配置文件也是必不可少的。如果我们的程序已经进行了发布,但是有需求是 : 用户在使用的过程中有可能需要配置参数,这个时候不能让用户拿着代码去该配置文件,所以我们就要给用户留出接口,直接去修改整个程序。
这里只需要添加一个函数即可
public static void writeProperties(String name,String password,String version) {
Properties properties = new Properties();
InputStream inputStream = Thread.currentThread().getContextClassLoader().getResourceAsStream("haha/test.properties");
properties.setProperty("db.name",name);
properties.setProperty("db.password",password);
properties.setProperty("app.version",version);
}
在读入之前调用该函数,该函数比较简单,不再赘述。