Java读取Properties配置文件
目录
1.Properties类与Properties配置文件
2.Properties中的主要方法
3.示例
1.Properties类与Properties配置文件
Properties类继承自Hashtable类并且实现了Map接口,使用键值对的形式来保存属性集。不过Properties的键和值都是字符串类型。
2.Properties中的主要方法
(1)load(InputStream inStream)
此方法可以从.properties属性文件对应的文件输入流中,加载属性列表到Properties类对象。用于读取Properties配置文件。
Properties prop = new Properties(); //读取属性文件a.properties InputStream in = new BufferedInputStream (new FileInputStream("a.properties")); prop.load(in); ///加载属性列表 Iterator<String> it=prop.stringPropertyNames().iterator(); while(it.hasNext()){String key=it.next();System.out.println(key+":"+prop.getProperty(key)); } in.close();
(2)store(OutputStream out, String comments)
此方法将Properties类对象的属性列表保存到输出流中。用于写Properties配置文件。
Properties prop = new Properties(); //保存属性到b.properties文件 FileOutputStream oFile = new FileOutputStream("b.properties", true);//true表示追加打开 prop.setProperty("phone", "10086"); prop.store(oFile, "Comment");//如果comments不为空,保存后的属性文件第一行会是#comments,表示注释信息;如果为空则没有注释信息。注释信息后面是属性文件的当前保存时间信息。 oFile.close();
(3)getProperty/setProperty
这两个方法是分别是获取和设置属性信息。
3.示例
下面是黄勇老师写的获取属性文件的工具类。
/*** 属性文件工具类*/ public final class PropsUtil {private static final Logger LOGGER = LoggerFactory.getLogger(PropsUtil.class);/*** 加载属性文件*/public static Properties loadProps(String fileName) {Properties props = null;InputStream is = null;try {is = Thread.currentThread().getContextClassLoader().getResourceAsStream(fileName);if (is == null) {throw new FileNotFoundException(fileName + " file is not found");}props = new Properties();props.load(is);} catch (IOException e) {LOGGER.error("load properties file failure", e);} finally {if (is != null) {try {is.close();} catch (IOException e) {LOGGER.error("close input stream failure", e);}}}return props;}/*** 获取字符型属性(默认值为空字符串)*/public static String getString(Properties props, String key) {return getString(props, key, "");}/*** 获取字符型属性(可指定默认值)*/public static String getString(Properties props, String key, String defaultValue) {String value = defaultValue;if (props.containsKey(key)) {value = props.getProperty(key);}return value;}/*** 获取数值型属性(默认值为 0)*/public static int getInt(Properties props, String key) {return getInt(props, key, 0);}// 获取数值型属性(可指定默认值)public static int getInt(Properties props, String key, int defaultValue) {int value = defaultValue;if (props.containsKey(key)) {value = CastUtil.castInt(props.getProperty(key));}return value;}/*** 获取布尔型属性(默认值为 false)*/public static boolean getBoolean(Properties props, String key) {return getBoolean(props, key, false);}/*** 获取布尔型属性(可指定默认值)*/public static boolean getBoolean(Properties props, String key, boolean defaultValue) {boolean value = defaultValue;if (props.containsKey(key)) {value = CastUtil.castBoolean(props.getProperty(key));}return value;} }
里面用到了CastUtil类,该类是为了处理一些数据转型操作而准备的,代码如下:
/*** 转型操作工具类*/ public final class CastUtil {/*** 转为 String 型*/public static String castString(Object obj) {return CastUtil.castString(obj, "");}/*** 转为 String 型(提供默认值)*/public static String castString(Object obj, String defaultValue) {return obj != null ? String.valueOf(obj) : defaultValue;}/*** 转为 double 型*/public static double castDouble(Object obj) {return CastUtil.castDouble(obj, 0);}/*** 转为 double 型(提供默认值)*/public static double castDouble(Object obj, double defaultValue) {double doubleValue = defaultValue;if (obj != null) {String strValue = castString(obj);if (StringUtil.isNotEmpty(strValue)) {try {doubleValue = Double.parseDouble(strValue);} catch (NumberFormatException e) {doubleValue = defaultValue;}}}return doubleValue;}/*** 转为 long 型*/public static long castLong(Object obj) {return CastUtil.castLong(obj, 0);}/*** 转为 long 型(提供默认值)*/public static long castLong(Object obj, long defaultValue) {long longValue = defaultValue;if (obj != null) {String strValue = castString(obj);if (StringUtil.isNotEmpty(strValue)) {try {longValue = Long.parseLong(strValue);} catch (NumberFormatException e) {longValue = defaultValue;}}}return longValue;}/*** 转为 int 型*/public static int castInt(Object obj) {return CastUtil.castInt(obj, 0);}/*** 转为 int 型(提供默认值)*/public static int castInt(Object obj, int defaultValue) {int intValue = defaultValue;if (obj != null) {String strValue = castString(obj);if (StringUtil.isNotEmpty(strValue)) {try {intValue = Integer.parseInt(strValue);} catch (NumberFormatException e) {intValue = defaultValue;}}}return intValue;}/*** 转为 boolean 型*/public static boolean castBoolean(Object obj) {return CastUtil.castBoolean(obj, false);}/*** 转为 boolean 型(提供默认值)*/public static boolean castBoolean(Object obj, boolean defaultValue) {boolean booleanValue = defaultValue;if (obj != null) {booleanValue = Boolean.parseBoolean(castString(obj));}return booleanValue;} }
castUtil类中用到了StringUtil类,它提供一些字符串操作,代码如下:
/*** 字符串工具类*/ public final class StringUtil {/*** 判断字符串是否为空*/public static boolean isEmpty(String str) {if (str != null) {str = str.trim();}return StringUtils.isEmpty(str);}/*** 判断字符串是否非空*/public static boolean isNotEmpty(String str) {return !isEmpty(str);} }
这样就可以直接运用这个工具类操作Properties配置文件了。
操作示例(获取一个int属性的值,并给一个默认值1):
Properties conf = PropsUtil.loadProps("config.properties"); int value = PropsUtil.getInt(conf,"key",1);
这样操作就方便多了。
转载于:https://blog.51cto.com/zhanghuiyuan/1937062
相关文章:
《C#精彩实例教程》小组阅读02 – Visual Studio简介与安装
本图文详细介绍了什么是Visual Studio,以及Visual Studio的安装过程。 上一次我们介绍了Visual Studio 2015的下载,以及MSDN。 这一次,我们说说什么是Visual Studio以及如何安装。 Visual Studio(简称VS)是微软公司…

从.NET寻找出路
自从成了金融危机的牺牲品之后,一直在寻找出路. 从.NET开发人员 到 待业青年, 再到现在的 技术支持,有些茫然,不知道未来在哪里!! 工作一年半,发现给别人打工没啥发展,…

关于高速光耦6n137的使用总结_光耦使用中的那点事1
目前通用的隔离器件有光耦、变压器隔离、电容耦合等三大主流方式。其中光耦和变压器隔离使用的较多,有很多地方都可以见到。本次推送主要介绍光电耦合器的几个使用注意事项,以下截图数据来源于TLP785的数据手册。1、延时时间大家可以看到在5V供电情况下&…

javascript回调函数笔记
来源于:https://github.com/useaname/blog-study 在Javascript中,函数是第一类对象。意味函数可以像对象一样按照第一类被管理使用。回调函数是从一个叫函数式编程的编程范式中衍生出来的概念。简单来说,函数式编程就是使用函数作为变量。函数…

工厂方法模式与抽象工厂模式的区别
工厂方法模式: 一个抽象产品类,可以派生出多个具体产品类。 一个抽象工厂类,可以派生出多个具体工厂类。 每个具体工厂类只能创建一个具体产品类的实例。 抽象工厂模式: 多个抽象产品类,每个抽象产品类可以派生出多个具…
LSGO代码小组第18周复盘日志
LSGO软件技术团队第18周代码小组学习复盘日志。

唐山松下焊接机器人编程招聘_机器人四小家族-松下Panasonic专注焊接
在日本松下的网站,机器人是和焊接系统方案是在一起的。松下机器人的历史(来源于松下公司网站)1980年松下AW系列弧焊机器人投放上市,机器人系统之间采用的是单向模拟通讯方式模拟通讯的机器人1983年示教的容易化1988年减少干涉的设…
基于Matlab的BP神经网络在非线性函数拟合中的应用
本图文详细介绍了如何利用Matlab神经网络工具箱实现BP神经网络对非线性函数的拟合。

aligned_storage简单学习
#include <iostream> #include <type_traits> #include <string>/* template< std::size_t Len, std::size_t Align default-alignment >struct::type aligned_storage; 相当于一个内建的POD类型他的大小是Size他的对齐方式是Align */ template<c…

有关高级关系引擎中存在错误
SQL server2005 Analysis Services项目中出现以下错误 高级关系引擎中存在错误。 无法与 DataSourceID 为“Adventure Works DW”、名称为“Adventure Works DW”的数据源建立连接。 但是数据源测试连接是好使的,搜到已解决办法,数据源对里双击…

c#中接口的使用方法图解_C#图解教程 第十五章 接口
接口什么是接口接口是指定一组函数成员而不实现它们的引用类型。所以只能类和结构来实现接口。这种描述比较抽象,直接来看个示例。下例中,Main方法创建并初始化了一个CA类的对象,并将该对象传递给PrintInfo方法。classCA{public stringName;p…

提高C#编程水平的50个要点
1.总是用属性 (Property) 来代替可访问的数据成员 2.在 readonly 和 const 之间,优先使用 readonly 3.在 as 和 强制类型转换之间,优先使用 as 操作符 4.使用条件属性 (Conditional Attributes) 来代替条件编译语句 #if 5.总是为自定义类重载 ToString 方…

1.6 INSERT语句
1.6 INSERT语句正在更新内容,请稍后
基于Matlab的多层BP神经网络在非线性函数拟合中的应用
本图文详细介绍了如何利用Matlab神经网络工具箱实现多层BP神经网络对非线性函数的拟合。

华为云大数据存储的冗余方式是三副本_大数据入门:HDFS数据副本存放策略
大数据处理当中,数据储存始终是一个重要的环节,从现阶段的市场现状来说,以Hadoop为首的大数据技术框架,仍然占据主流地位,而Hadoop的HDFS,在数据存储方面,仍然得到重用。今天的大数据入门分享&a…

linux调试C++错误: 程序中有游离的‘\240’‘\302’
今天在网上找到一个小程序,一编译出现一大堆的错误: 程序中有游离的 ......开始觉得可能我从网页上直接复制的代码中有别的字符。于是把中文的全角空格全部替换了。这次好多了,少了一些,不过还有很多,调试信息说是XX行…

IE8下不识别indexOf的问题
1、为Array原型添加indexOf方法(如果学过面向对象,相当于给Array类添加实例方法),方法体如下: //添加数组IndexOf方法 if (!Array.prototype.indexOf){Array.prototype.indexOf function(elt /*, from*/){var len this.length >>> 0;var from Number(arguments[1])…
《C#精彩实例教程》小组阅读05 -- C#变量与常量
本微信图文介绍了C#的变量与常量。

k均值聚类算法考试例题_一文读懂K-means聚类算法
1、引言什么是聚类?我们通常说,机器学习任务可以分为两类,一类是监督学习,一类是无监督学习。监督学习:训练集有明确标签,监督学习就是寻找问题(又称输入、特征、自变量)与标签&…
《C#精彩实例教程》小组阅读06 -- C#运算符与表达式
本微信图文介绍了C#的运算符与表达式。

kvm启动报错
[rootstorage ~]# virsh -c qemu:///system list error: failed to connect to the hypervisor error: Failed to connect socket to /var/run/libvirt/libvirt-sock: No such file or directory原因:libvirt未启动解决方法[rootstorage ~]# libvirtd -d [rootst…

邀请参加活动的邀请函_圣诞节活动策划邀请函在线制作
2020年就要过去了,许多人说这一年很难,难上加南。莎士比亚说凡是过去,皆为序章。无论好的还是坏的终究会成为过往,向前看吧。圣诞节快要到来,商场开始布置精致的橱窗,电商巨头也在忙着做促销,幼…

比较全的字符串验证类,有人顶的话以后继续发
啥也不说看代码哈~ Codeusing System;using System.Collections.Generic;using System.Text;using System.Text.RegularExpressions;namespace Utility { public class ISExt { private static ISExt instance null; public static ISExt GetInstance…

设计模式(2)工厂方法模式(Factory Method)
设计模式(0)简单工厂模式 设计模式(1)单例模式(Singleton) 源码地址 0 工厂方法模式简介 0.0 工厂方法模式定义 工厂方法模式是在简单工厂模式基础上,为解决更复杂的对象创建问题而衍生进化出来…
基于Matlab的遗传算法优化BP神经网络在非线性函数拟合中的应用
本微信图文详细介绍了遗传算法优化BP神经网络初始权值阈值的过程,并通过实例说明该优化能够提升BP神经网络的预测精确程度。

android 加载h5页面部分机型滑动卡顿回弹_网易爆款H5 的交互方法参考
在早些年,H5其实更像是手机上的PPT,只支持点击、滑动这些基础手势操作。以内容展示为主,交互形式为辅。但到了今天,H5的玩法已经有了质的突破。不仅交互形式超多,形式与内容也能紧密结合,产生11大于2的效果…

使用SDL打造游戏世界之入门篇 - 1
来源:天极开发 作者:维维编译 出处:巧巧读书 2007-07-17 进入讨论组 简介 Simple DirectMedia Layer, 简称SDL,是一个自由的跨平台的多媒体开 发包,主要通过OpenGL和2D视频帧缓冲(framebuffer)提供对音频、键盘、鼠标…

RBAC新解 - 基于资源的权限管理
1、什么是角色 当说到程序的权限管理时,人们往往想到角色这一概念。角色是代表一系列可执行的操作或责任的实体,用于限定你在软件系统中能做什么、不能做什么。用户帐号往往与角色相关联,因此,一个用户在软件系统中能做什么取决于…
《C#精彩实例教程》小组阅读07 -- C#字符与字符串
本微信图文详细介绍了C#中的字符与字符串。

syslog打印不带等级_printk的日志级别和控制台级别
printk根据日志级别(loglevel)对消息进行分类。日志级别用宏定义,日志级别宏展开为一个字符串,在编译时由预处理器将它和消息文本拼接成一个字符串,因此printk 函数中日志级别宏和格式字符串间不能有逗号。下面是两个printk的例子,…