Properties类与配置文件读取工具类的实现

一、 Properties类

Properties类表示一组持久的属性,能被保存到流,也可从流中加载。属性集合中的每个key和对应的value都是字符串。

1. 构造与属性

Properties类继承于Hashtable,也是线程安全的。

public class Properties extends Hashtable<Object,Object>

属性列表能包含另一个属性列表,作为其默认值。如果在原属性列表中,属性key没有被搜索到,会在第二个属性列表中搜索。

protected Properties defaults;
// 创建无默认属性的空属性列表
public Properties() {
    this(null);
}
// 创建有着默认属性的空属性列表
public Properties(Properties defaults) {
    this.defaults = defaults;
}

2. 方法

setProperty方法调用Hashtableput方法。

public synchronized Object setProperty(String key, String value) {
    return put(key, value);
}

从输入字符流或者字节流中,用面向行的方式读取属性列表(键值对)。

public synchronized void load(Reader reader) throws IOException {
    load0(new LineReader(reader));
}
public synchronized void load(InputStream inStream) throws IOException {
    load0(new LineReader(inStream));
}

例:properties.load(new FileInputStream("test.properties"));

其它方法

public String getProperty(String key):用指定的键在此属性列表中搜索属性。
public String getProperty(String key, String defaultValue)
例:properties.getProperty("key"); 根据key获取value

public void save(OutputStream out, String comments)
public void list(PrintStream out) :打印属性列表到指定输出流
例:properties.list(System.out); 打印键值对到控制台

public synchronized void loadFromXML(InputStream in):从输入流装载XML文件
例:properties.loadFromXML(new FileInputStream("test.xml"));

public void storeToXML(OutputStream os, String comment):保存到XML文件
例:prop.storeToXML(new FileOutputStream("test.xml"), "output");

二、 配置文件读取工具类的实现

1. 初始化项目

首先使用maven工具创建项目,并对配置文件pom.xml编写相关的依赖。

<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-api</artifactId>
    <version>1.7.5</version>
</dependency>
<dependency>
    <groupId>ch.qos.logback</groupId>
    <artifactId>logback-core</artifactId>
    <version>1.2.3</version>
    <scope>compile</scope>
</dependency>
<dependency>
    <groupId>ch.qos.logback</groupId>
    <artifactId>logback-classic</artifactId>
    <version>1.2.3</version>
    <scope>compile</scope>
</dependency>
<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-lang3</artifactId>
    <version>3.1</version>
</dependency>

其中,依赖主要关于日志输出StringsUtil工具类的使用。

2. 准备配置文件

接着,我们来准备一个测试配置文件 test.properties放置在resources目录下,内容如下:

ftp.server.ip=192.168.175.145

3. 实现类PropertiesUtil

类的实现主要包含了加载配置文件,根据指定KEY值获取到VALUE两个过程,考虑到根据KEY获取VALUE值为null的情况,重载getProperty方法。
类中的属性和方法均声明为static,作为类属性和类方法,不需要重复进行实例化。

package com.lzp.util;

import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Properties;

/**
 * @program: CommonUtil
 * @description: 配置文件读取工具类
 * @author: lzp
 * @create: 2018/4/24
 */
public class PropertiesUtil {
    /* 创建日志对象*/
    private static Logger logger = LoggerFactory.getLogger(PropertiesUtil.class);

    /* 声明Properties变量*/
    private static Properties properties;

    /* 加载配置文件*/
    static {
        String file = "test.properties";
        properties = new Properties();
        try {
            properties.load(new InputStreamReader(PropertiesUtil.class.getClassLoader().getResourceAsStream(file), "UTF-8"));
        } catch (IOException ioe) {
            logger.error("配置文件读取异常", ioe);
        }
    }

    /* 根据key获取value*/
    public static String getProperty(String key) {
        String value = properties.getProperty(key.trim());
        if (StringUtils.isBlank(value)) {
            return null;
        }
        return value;
    }

    /* 获取value为空或者空串时,设置默认值*/
    public static String getProperty(String key, String defaultValue) {
        String value = properties.getProperty(key.trim());
        if (StringUtils.isBlank(value)) {
            value = defaultValue;
        }
        return value.trim();
    }

    /**
     * 测试
     *
     * @param args
     */
    public static void main(String[] args) {
        String ftp_server_ip = PropertiesUtil.getProperty("ftp.server.ip");
        System.out.println(ftp_server_ip);
    }
}

#

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值