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()即可(因为是静态方法,事先连对像也不用创建的),这样如果内存中有缓存,函数就会直接读取内存中的数据,节省时间,如果没有缓存也不用担心,系统会自动为你加载,使用者完全不用知道其是如何实现的,只需要知道我能直接调用函数获得想要的值就行了