Logo

郎哥编程

应用读写项目配置的Properties类

2018-08-08 888

文章导读

Properties类也是Map接口的实现类,主要用于读取Java的配置文件,Properties类使用键值对的形式来保存配置文件的配置项。本文介绍如何使用Properties类读写配置文件。


在开发软件项目时,经常需要读取项目的一些配置数据。例如,项目里用到的数据库链接地址、Tomcat服务端口号、数据文件备份地址等信息都需要放到一个配置文件里,由程序读取并使用。使用配置文件的好处是,当需要改变数据库连接地址、Tomcat服务端口号、数据文件备份地址等信息时,不需要修改代码,只需要修改配置文件的配置项就可以了。

Java提供了Properties类用于实现配置文件的写入和读取,Properties类应用Map接口实现对Java配置文件的写入和读取操作。

本文分成三个小节介绍Properties类。第一小节介绍Properties类的构造函数及属性存取方法;第二小节使用Properties类创建一个配置文件并写入配置项;第三小节使用Properties类读取已创建的配置文件。

第一小节  Properties类的构造函数及属性存取方法

1、Properties类 的构造函数

Properties 提供了二个常用的构造函数,说明如下:

●  Properties ()

使用该构造函数,创建一个空的属性列表,没有默认值。

●  Properties (Properties  defaults)

使用该构造函数,创建一个空的属性列表,具有指定的默认值。

2、Properties类 的属性存取

同其它Map接口实现类一样,Properties类也提供了get和put方法用于元素的存取。但不建议使用这两个方法,因为这两个方法允许调用者插入新的键值对,或者值不是 String类型的数据,应该使用 setProperty和getProperty方法。

●  Object  setProperty (String key, String value)

该方法用于在属性列表中添加一个属性项,如果key指定的属性项已存在,则修改该属性项。

●  String  getProperty (String key)

该方法用于获取指定key的属性值。

Properties类属性存取示例代码如下:

package com.milihua.propertiesdemo;
import java.util.Properties;
public class PropertiesDemo {
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Properties prop = new Properties();
        prop.setProperty("ip","192.168.62.190");
        prop.setProperty("port","8080");
        prop.setProperty("name","admin");
        prop.setProperty("psw","123456");
     // 获取ip的值
        String ip = prop.getProperty("ip");
        // 获取port的值
        String port = prop.getProperty("port");
        System.out.println("ip=" + ip + ",port=" + port);
    }
}

程序实例化对象Properties,并调用setProperty方法添加了ip、port、name、psw四个属性项。然后,调用getProperty方法获取属性值。程序输出结果如下图所示:

blob.png

图1  PropertiesDemo输出结果

Properties类主要用于配置文件的读取和修改,需要将属性写入到配置文件中,或者从配置文件读取属性。

第二小节  使用Properties类创建配置文件

使用Properties类可以创建一个新的配置文件,并写入配置项。Properties类的Save方法可以保存新创建的配置文件到指定磁盘位置。Save方法说明如下:

●  void save(Writer writer, String comments) throws IOException

该方法将当前属性列表写入到输出字符流中,因为该方法会抛出IO异常,因此在调用此方法时,应使用try-catch语句捕获IO异常。

Properties类创建配置文件示例代码如下:

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Properties;
public class PropertiesDemo {
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Properties prop = new Properties();
        prop.setProperty("ip","192.168.62.190");
        prop.setProperty("port","8080");
        prop.setProperty("name","admin");
        prop.setProperty("psw","123456");
     // 获取ip的值
        String ip = prop.getProperty("ip");
        // 获取port的值
        String port = prop.getProperty("port");
        //保存文件
        try {
            prop.store(new FileOutputStream(new File("database.xml")), "数据库配置属性");
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        System.out.println("ip=" + ip + ",port=" + port);
    }
 
}

程序代码与属性存取示例代码基本相同,不同的是添加了保存属性列表到database.xml文件的语句。写入的database.xml文件内容如下图所示:

blob.png


图2 database.xml配置文件内容

从图中可以看出,代码创建的属性项都已写入配置文件。唯一的问题是第一行显示了乱码,乱码内容是在调用store方法存储配置文件时传入了中文注释内容“数据库配置属性”,当写入配置文件用的编码和读取配置文件用的编码不一致时,就会出现中文乱码问题。因此建议在写配置文件时尽量不要使用中文内容。

第三小节  使用Properties类读取配置文件

Properties类提供了load方法用于读取配置文件。load方法说明如下:

●  void load(Reader reader) throws IOException

该方法用于从输入字符流中读取属性列表,因为该方法会抛出IO异常,因此在调用此方法时,应使用try-catch语句捕获IO异常。

Properties类读取配置文件示例代码如下:

import java.io.FileInputStream;
import java.io.IOException;
import java.util.Enumeration;
import java.util.Properties;
public class ReadPropertiesDemo {
 
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Properties pps = new Properties();
        //读取配置文件
        try {
            pps.load(new FileInputStream("database.xml"));
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        //获取属性列表
        Enumeration<?> enum1 = pps.propertyNames();//得到配置文件的名字
        //遍历属性列表
        while(enum1.hasMoreElements()) {
              String strKey = (String) enum1.nextElement();
              String strValue = pps.getProperty(strKey);
              System.out.println(strKey + "=" + strValue);
      }
    }
}

程序调用load方法读取上例中创建的配置文件,然后调用propertyNames方法获取属性项枚举集合,最后遍历枚举集合输出属性项。程序输出结果如下图所示:

blob.png


图3  ReadPropertiesDemo输出结果

从上图可以看出,程序正确输出了配置文件的所有属性项。

文章小结

Properties类实现了Map接口,利用map来存储key-value配置项,key是配置项的键,value是配置项的值。Properties类通过配置项的key获取配置项的value。当用Properties类的load方法加载配置项时,Properties类自动解析配置文件,将配置文件直接映射成Map结构,方便配置文件的读取。

思考与练习

用Properties类建立JDBC配置文件,然后遍历并读取配置文件,配置文件配置项如下:

jdbc.username=root

jdbc.password=123456

jdbc.url=jdbc:mysql://192.168.50.25:3306

jdbc.driverClassName=com.mysql.jdbc.Driver

其中,等号左边为配置项的key,等号右边为配置项的value。

 


代码在线纠错(通义千问 qwen-max)

支持粘贴多个代码文件,提交后由阿里云通义千问自动分析代码漏洞、语法错误、逻辑问题并给出修改建议。
您已解锁 AI 代码纠错功能,可正常使用!

评论区

登录 后发表评论
暂无评论