您的位置:首页 > 编程语言 > Java开发

java读取properties配置文件的方法

2016-12-02 10:17 423 查看
app.properties

mail.smtp.host=smtp.163.com
mail.transport.protocol=smtp


  

import java.io.InputStream;
import java.util.Properties;

import cn.zsmy.constant.Constant;

public class ReadProperties {

public static String host = null;
public static String protocol = null;
public static String auth = null;
public static String port = null;
public static String sender = null;
public static String password = null;

//类加载后就执行,在需要的地方直接用类名.属性名即可,如ReadProperties.host,其他类要使用时需要将属性定义成public的,或者提供get方法
static{
loads();
}

/**
* 读取properties
*/
public static void loads(){
if(host == null || protocol == null)
{
InputStream is = ReadProperties.class.getResourceAsStream("/app.properties");
Properties dbProps = new Properties();
try {
dbProps.load(is);
host = dbProps.getProperty("mail.smtp.host");
protocol = dbProps.getProperty("mail.transport.protocol");
auth = dbProps.getProperty("mail.smtp.auth");
port = dbProps.getProperty("mail.smtp.port");
sender = dbProps.getProperty("mail.sender");
password = dbProps.getProperty("mail.password");
}catch (Exception e) {
Constant.MY_LOG.error("不能读取属性文件. " +"请确保app.properties在CLASSPATH指定的路径中");
}
}
}

/**
* 也可以调方法获取值,这样更万无一失,强烈建议用此方法,防止jvm内存回收后数据为空(看网上说静态属性是不会被回收的,除非类被回收)
* @return
*/
public static String getHost() {
if(host==null){
loads();
}
return host;
}

public static String getProtocol() {
if(protocol == null){
loads();
}
return protocol;
}

public static String getAuth() {
return auth;
}

public static String getPort() {
return port;
}

public static String getSender() {
return sender;
}

public static String getPassword() {
return password;
}

public static void main(String[] args) {
System.out.println(ReadProperties.host+"--------"+ReadProperties.protocol);
getHost();
System.out.println(ReadProperties.host+"--------"+ReadProperties.protocol);
}
}


这个方法不仅能够缓存配置文件内容,还能够做到自动加载配置文件的内容到内存,使用者完全不用考虑手动加载的过程,只需要在需要用到的地方直接调用getHost()即可(因为是静态方法,事先连对像也不用创建的),这样如果内存中有缓存,函数就会直接读取内存中的数据,节省时间,如果没有缓存也不用担心,系统会自动为你加载,使用者完全不用知道其是如何实现的,只需要知道我能直接调用函数获得想要的值就行了
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: