Logo

郎哥编程

Properties配置类

2019-12-27 205

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

Map接口还有一个重要的实现类Properties类,主要用于读取Java的配置文件,配置文件中很多变量是经常改变的,用于满足不同的项目部署环境要求。

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的属性值。

案例1:建立PropertiesTest1类,实例化Properties对象,进行配置项的存取操作。

在map包下新建PropertiesTest1类。代码如下:

package map;
 
import java.util.Properties;
 
/** 
* @ClassName: PropertiesTest1 
* @Description: 集合框架(Properties配置类)案例1
* @author 编程训练营 
* @date 
* 
*/
 
public class PropertiesTest1 {
 
    /** 
    * @Title: main 
    * @Description: Java程序入口main方法  
    * @param @param args    参数 
   
    * @return void    返回类型 
    * @throws 
    */
 
    public static void main(String[] args) {
       // 实例化Properties对象
       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方法获取属性值。

程序执行结果如下图所示:

image.png                                             

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

3、Properties类 的配置文件的读取

●   void load(Reader reader) throws IOException

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

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

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

●   storeToXML(OutputStream os, String comment)

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

●   storeToXML(OutputStream os, String comment, String encoding)

该方法将当前属性列表写入到XML文件中,文件的编码由encoding指定。因为该方法会抛出IO异常,因此在调用此方法时,应使用try-catch语句捕获IO异常。

案例2:建立PropertiesTest2类,实例化Properties对象,进行配置文件的写入操作。

在map包下新建PropertiesTest2类。代码如下:

package map;
 
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Properties;
 
/** 
* @ClassName: PropertiesTest2 
* @Description: 集合框架(Properties配置类)案例2 
* @author 编程训练营 
* @date 
* 
*/
 
public class PropertiesTest2 {
 
    /** 
    * @Title: main 
    * @Description: Java程序入口main方法  
    * @param @param args    参数 
   
    * @return void    返回类型 
    * @throws 
    */
 
    public static void main(String[] args) {
       // 实例化Properties对象
       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.txt")), "Property");    
       } catch (IOException e) {
           // TODO Auto-generated catch block
           e.printStackTrace();
       }
       System.out.println("ip=" + ip + ",port=" + port);
 
    }
 
}

案例2代码与案例1的代码基本相同,不同的是添加了保存属性列表到database.txt的语句。database.txt文件会保存到Java项目的根目录下,如果希望保存到其它目录,可以指定文件存储路径。例如d:\ properties\database.txt,该存储路径将会把配置文件保存到D盘properties目录下。

写入的database.xml文件内容如下:

#Property
#Fri Dec 27 09:23:07 CST 2019
port=8080
psw=123456
name=admin
ip=192.168.62.190

配置文件内容行前带“#”符号的是配置文件的注释。每一行为一个配置项,每个配置项由key-value键值对构成,“=”符号左边是配置项的key,“=”符号右边是配置项的value,

案例3:建立PropertiesTest3类,实例化Properties对象,进行配置文件的读取操作。

在map包下新建PropertiesTest3类。代码如下:

package map;
 
import java.io.FileInputStream;
import java.io.IOException;
import java.util.Enumeration;
import java.util.Properties;
 
/** 
* @ClassName: PropertiesTest3 
* @Description: 集合框架(Properties配置类)案例3
* @author 编程训练营 
* @date  
* 
*/
 
public class PropertiesTest3 {
 
    /** 
    * @Title: main 
    * @Description: Java程序入口main方法 
    * @param @param args    参数 
   
    * @return void    返回类型 
    * @throws 
    */
 
    public static void main(String[] args) {
       Properties pps = new Properties();
       //读取配置文件
       try {
           pps.load(new FileInputStream("database.txt"));
       } 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方法读取案例2创建的配置文件,然后调用propertyNames方法获取属性项枚举集合,Enumeration接口定义了一些方法,通过这些方法可以枚举(一次获得一个)对象集合中的元素,其中hasMoreElements()方法判断当前枚举是否包含更多的元素,nextElement()获取当前枚举的下一个元素。

程序执行结果如下图所示:

image.png

Properties类表示了一个持久的属性集,它可保存在流中或从流中加载,属性列表中每个键及其对应值都是一个字符串。Properties类一般用于项目配置文件的存取。

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

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

评论区

登录 后发表评论
暂无评论