文档章节

common-tools(2)之properties替代者Setting类

路小磊
 路小磊
发布于 2013/03/03 16:50
字数 1315
阅读 161
收藏 0
点赞 0
评论 0

    首先广告自己的工具包 http://www.oschina.net/p/common-tools

------------------------ 邪恶的分割线 ------------------------------------

    由于Java是需要编译执行的,因此不像解释性语言那样可以把需要配置的文件放置在源代码中,因此我们最常用到的就是proerties文件和XML。当然后者的强大不容置疑,而应对一些简单的配置我们还是离不开proerties的,但是,properties文件的缺点有时令我们很郁闷……缺点如下:
    1、只支持ASSCII编码,导致我想加个中文注释吧都费劲(谁让咱英语烂呢……)
    2、Properties类的使用实在是不方便啊,我new完你还让我load一个流对象,费劲。
    3、不支持变量替换
    4、我讨厌这个单词,老是拼不对……

    于是就动手写了个Setting类,源码请看这里:
https://github.com/looly/common-tools/blob/master/src/main/java/com/baijob/commonTools/Setting.java

其实这个类与Properties类很相似,只不过强化了构造方法,首先看代码:

# **************************************************************
# ----- Setting File with UTF8-----
# ----- 样例配置文件 -----
# **************************************************************

bool.key = true
char.key = A
string1 = String of value
string2 = ${string1}
package com.baijob.commonTools;

public class SettingTest {
	public static void main(String[] args) {
		Setting setting = new Setting("config/example.setting", "utf8", true);
		boolean bool = setting.getBool("bool.key");
		char char1 = setting.getChar("char.key");
		String string = setting.getString("string1");
		String string2 = setting.getString("string2");
		
		System.out.println(bool + ", " + char1 + ", " + string + ", " + string2);
		
		//当配置文件有改动调用此方法
		setting.reload();
	}
}

    首先使用了其中一个最常用的构造方法,第一个参数是相对路径(相对于classes目录),第二个是这个Setting的字符集,第三个则是是否使用变量替换(如果使用,则在构造的时候会做变量 替换),下面几个方法就是获得不同类型的值了,是不是超简单超方便?同样的,默认我们在配置文件中用“#”表示注释,变量用${key}表示变量。当然,变量暂时只能在value中使用。

    当然,需要强调的是本类中有很多构造方法,这些构造方法是针对配置文件所处不同位置时设定的:
1、Setting(String pathBaseClassLoader, String charset, boolean isUseVariable)
    此方法用于读取配置文件基于classes目录的相对路径,例如Tomcat将class文件放在WEB_INF/classes下,那么给定pathBaseClassLoader值为"./config.setting"表示这个文件在WEB_INF/classes目录下。这样做的好处是配置文件随着项目变动不会影响读取,而且就算项目打成jar包或war包,依旧可以正常读取。

2、public Setting(File configFile, String charset, boolean isUseVariable)
    此方法传入一个File类,一般new一个File即可,常用语读取绝对路径的配置文件

3、Setting(String path, Class<?> clazz, String charset, boolean isUseVariable)
    此方法也是读取相对路径的配置文件,只不过这回相对的是给定的Class。例如给定的Class是com.aaa.bb.AA.class,则给定路径"./config.setting"表示与AA.class同目录下的config.setting文件,也是支持打包读取哦。

4、Setting(URL url, String charset, boolean isUseVariable)
    此方法接受一个URL对象,用于读取URL指定的配置文件


5、Setting(Charset charset, boolean isUseVariable)
    好吧,如果你不想在一开始的时候就初始化一切,就可以先调这个方法把对象new出来,然后调用load方法去加载配置文件。

    第5种构造在什么时候可能用到呢?我想的是你对我的变量定义不满意,例如你发现${key}这种变量名与你的项目的其他东东冲突了,OK,我提供了setVarRegex(String regex)方法来自定义变量的形式。由于变量我是通过正则去匹配的,你也必须给我一个正则的形式,我在注释中是这样规定的:正则只能有一个group表示变量本身,剩余为字符 例如 \$\{(name)\}表示${name}变量名为name的一个变量表示。

    现在你知道有时老实点儿遵循规范可以减少很多学习成本和时间,我恨不得你所有的配置文件都在相对路径下,反正我是这么做的。

    接下来,解释个方便的好方法:settingToObject(Object object),这个方法是映射配置文件中的键值对给一个对象的,这样的话,假如你这个对象有个方法叫setName(String name),配置文件中有个name=凤姐,那么调用此方法会自动将“凤姐”注入进去(好邪恶……),想想Spring的IOC,我是不是应该改这个方法的名字叫settingToBean呢?不管了,反正能干活就行。

    因为是继承自Map,故可以调用set方法保存配置,这时配置只保存在内存中。

    最后解释下持久化Setting,有个store方法可以保存Setting为文件,有两个重载方法可以使用相对或绝对路径,但是不能写入jar包中的配置文件。

    好了,这个类解释完了,我这有点儿懒,没给出很详细的代码,大家有兴趣的可以去看看源码,如果觉得有用,也可以单独拷贝出来用(这个类依赖FileUtil和net/URLUtil)。

    恩……就到这里,大周末的,衣服还没洗……单身屌丝只能靠自己啊~~

© 著作权归作者所有

共有 人打赏支持
路小磊

路小磊

粉丝 275
博文 53
码字总数 39918
作品 5
乌海
程序员
Common Gui Tools 1.1,Java GUI实用小工具集

Common Gui Tools Common Gui Tools 是用java编写,GUI界面的实用小工具集,1.1版有13个小工具: 1,编码转换:Character Converter 2,加密解密:Encrypt And Decrypt 3,计算文件数字签名:...

bs2004 ⋅ 2014/07/03 ⋅ 9

TypeScript手册翻译系列7-常见错误与Mixins

常见错误 下面列出了在使用TypeScript语言和编译器期间,经常会遇到的一些常见错误。 "tsc.exe" exited with error code 1. 解决方案: 检查文件编码为UTF-8 - https://typescript.codeplex.c...

一配 ⋅ 2015/10/04 ⋅ 0

Hutool之Properties替代——Setting

前言 对于JDK自带的Properties读取的文件,对我们来说有很多限制,首先是编码导致没法加中文的value和注释(用日本的那个插件在Eclipse里可以读写,放到服务器上读就费劲了),再就是不支持变...

路小磊 ⋅ 2014/08/16 ⋅ 0

Common Gui Tools 1.2 发布,Java GUI 实用小工具集

Common Gui Tools 是用java编写,GUI界面的实用小工具集,1.2版有16个小工具: 1,编码转换:Character Converter2,加密解密:Encrypt And Decrypt3,计算文件数字签名:File Digital Sign...

bs2004 ⋅ 2014/10/17 ⋅ 38

Common Gui Tools 1.0,Java GUI实用小工具集

Common Gui Tools 是用java编写,GUI界面的实用小工具集,1.0版暂有6个小工具: 1,编码转换:Character Converter 2,加密解密:Encrypt And Decrypt 3,正则表达式验证:Regex Tester 4,执...

bs2004 ⋅ 2013/03/20 ⋅ 18

Common Gui Tools 1.02,Java GUI实用小工具集

Common Gui Tools 是用java编写,GUI界面的实用小工具集,1.02版有8个小工具: 1,编码转换:Character Converter 2,加密解密:Encrypt And Decrypt 3,正则表达式验证:Regex Tester 4,执...

bs2004 ⋅ 2013/04/10 ⋅ 2

java全栈式WEB开发框架--achieve server

achieve server是一个java全栈式开发框架。是本人在使用spring mvc之后,发现spring mvc很多功能不够 强大和灵活的问题后设计和编写的包涵spring mvc几乎所有功能并加强,用法和接口也比较类...

王传昊 ⋅ 2014/06/06 ⋅ 0

SpringBoot使用velocity模板引擎

第五章 使用velocity模板引擎 最爽的Web组合开发就是Intellij IDEA + Maven + Spring Boot + Scala + Velocity + Boostrap + jQuery了. Spring Boot提供了一个强大的一键式Spring的集成开发环...

东海陈光剑 ⋅ 2016/07/02 ⋅ 14

Android NDK配置过程中出现的问题

解决问题的终极大发,直接更换版本这个是一定能够成功的。 问题出现总是有原因的,就是原因太多无法解决,那么主要从两个方面解决。第一个是更新操作平台,软件平台之间的版本关系影响很大。...

洋碱 ⋅ 2016/01/19 ⋅ 0

common-tools(4)之端口映射和SSH tunnel方式连接数据库

如果大家用过一些数据库客户端软件,会发现里面有一项是SSH,可以使用SSH通道来连接到远程主机的数据库,此时我们就可以使用内网IP来直连数据库了。不知道大家有多少是这么用数据库的,我想这...

路小磊 ⋅ 2013/04/21 ⋅ 8

没有更多内容

加载失败,请刷新页面

加载更多

下一页

个人博客的运营模式能否学习TMALL天猫质量为上?

心情随笔|个人博客的运营模式能否学习TMALL天猫质量为上? 中国的互联网已经发展了很多年了,记得在十年前,个人博客十分流行,大量的人都在写博客,而且质量还不错,很多高质量的文章都是在...

原创小博客 ⋅ 今天 ⋅ 0

JavaScript零基础入门——(十一)JavaScript的DOM操作

JavaScript零基础入门——(十一)JavaScript的DOM操作 大家好,欢迎回到我们的JavaScript零基础入门。最近有些同学问我说,我讲的的比书上的精简不少。其实呢,我主要讲的是我在开发中经常会...

JandenMa ⋅ 今天 ⋅ 0

volatile和synchronized的区别

volatile和synchronized的区别 在讲这个之前需要先了解下JMM(Java memory Model :java内存模型):并发过程中如何处理可见性、原子性、有序性的问题--建立JMM模型 详情请看:https://baike.b...

MarinJ_Shao ⋅ 今天 ⋅ 0

深入分析Kubernetes Critical Pod(一)

Author: xidianwangtao@gmail.com 摘要:大家在部署Kubernetes集群AddOn组件的时候,经常会看到Annotation scheduler.alpha.kubernetes.io/critical-pod"="",以表示这是一个关键服务,那你知...

WaltonWang ⋅ 今天 ⋅ 0

原子性 - synchronized关键词

原子性概念 原子性提供了程序的互斥操作,同一时刻只能有一个线程能对某块代码进行操作。 原子性的实现方式 在jdk中,原子性的实现方式主要分为: synchronized:关键词,它依赖于JVM,保证了同...

dotleo ⋅ 今天 ⋅ 0

【2018.06.22学习笔记】【linux高级知识 14.4-15.3】

14.4 exportfs命令 14.5 NFS客户端问题 15.1 FTP介绍 15.2/15.3 使用vsftpd搭建ftp

lgsxp ⋅ 今天 ⋅ 0

JeeSite 4.0 功能权限管理基础(Shiro)

Shiro是Apache的一个开源框架,是一个权限管理的框架,实现用户认证、用户授权等。 只要有用户参与一般都要有权限管理,权限管理实现对用户访问系统的控制,按照安全规则或者安全策略控制用户...

ThinkGem ⋅ 昨天 ⋅ 0

python f-string 字符串格式化

主要内容 从Python 3.6开始,f-string是格式化字符串的一种很好的新方法。与其他格式化方式相比,它们不仅更易读,更简洁,不易出错,而且速度更快! 在本文的最后,您将了解如何以及为什么今...

阿豪boy ⋅ 昨天 ⋅ 0

Python实现自动登录站点

如果我们想要实现自动登录,那么我们就需要能够驱动浏览器(比如谷歌浏览器)来实现操作,ChromeDriver 刚好能够帮助我们这一点(非谷歌浏览器的驱动有所不同)。 一、确认软件版本 首先我们...

blackfoxya ⋅ 昨天 ⋅ 0

线性回归原理和实现基本认识

一:介绍 定义:线性回归在假设特证满足线性关系,根据给定的训练数据训练一个模型,并用此模型进行预测。为了了解这个定义,我们先举个简单的例子;我们假设一个线性方程 Y=2x+1, x变量为商...

wangxuwei ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部