摘要: 原创出处:www.bysocket.com 泥瓦匠BYSocket 希望转载,保留摘要,谢谢! “贵专” — 泥瓦匠

一、java.util.Properties API & 案例

java.util.Properties 是一个属性集合。常见的api有如下:

  • load(InputStream inStream)  从输入流中读取属性
  • getProperty(String key)  根据key,获取属性值
  • getOrDefault(Object key, V defaultValue) 根据key对象,获取属性值需要强转

首先在resources目录下增加/main/resources/fast.properties:

fast.framework.name=fast
fast.framework.author=bysocket
fast.framework.age=1

然后直接上代码PropertyUtil.java:

/**
* .properties属性文件操作工具类
*
* Created by bysocket on 16/7/19.
*/
public class PropertyUtil { private static final Logger LOGGER = LoggerFactory.getLogger(PropertyUtil.class); /** .properties属性文件名后缀 */
public static final String PROPERTY_FILE_SUFFIX = ".properties"; /**
* 根据属性文件名,获取属性
*
* @param propsFileName
* @return
*/
public static Properties getProperties(String propsFileName) {
if (StringUtils.isEmpty(propsFileName))
throw new IllegalArgumentException(); Properties properties = new Properties();
InputStream inputStream = null; try { try {
/** 加入文件名后缀 */
if (propsFileName.lastIndexOf(PROPERTY_FILE_SUFFIX) == -1) {
propsFileName += PROPERTY_FILE_SUFFIX;
} inputStream = Thread.currentThread().getContextClassLoader()
.getResourceAsStream(propsFileName);
if (null != inputStream)
properties.load(inputStream);
} finally {
if ( null != inputStream) {
inputStream.close();
}
} } catch (IOException e) {
LOGGER.error("加载属性文件出错!",e);
throw new RuntimeException(e);
} return properties;
} /**
* 根据key,获取属性值
*
* @param properties
* @param key
* @return
*/
public static String getString(Properties properties, String key){
return properties.getProperty(key);
} /**
* 根据key,获取属性值
*
* @param properties
* @param key
* @param defaultValue
* @return
*/
public static String getStringOrDefault(Properties properties, String key, String defaultValue){
return properties.getProperty(key,defaultValue);
} /**
* 根据key,获取属性值
*
* @param properties
* @param key
* @param defaultValue
* @param <V>
* @return
*/
public static <V> V getOrDefault(Properties properties, String key, V defaultValue){
return (V) properties.getOrDefault(key,defaultValue);
}
}

UT如下:

/**
* {@link PropertyUtil} 测试用例
* <p/>
* Created by bysocket on 16/7/19.
*/
public class PropertyUtilTest { @Test
public void testGetProperties() {
Properties properties = PropertyUtil.getProperties("fast");
String fastFrameworkName = properties.getProperty("fast.framework.name");
String authorName = properties.getProperty("fast.framework.author");
Object age = properties.getOrDefault("fast.framework.age",10);
Object defaultVal = properties.getOrDefault("fast.framework.null",10);
System.out.println(fastFrameworkName);
System.out.println(authorName);
System.out.println(age.toString());
System.out.println(defaultVal.toString());
} @Test
public void testGetString() {
Properties properties = PropertyUtil.getProperties("fast");
String fastFrameworkName = PropertyUtil.getString(properties,"fast.framework.name");
String authorName = PropertyUtil.getString(properties,"fast.framework.author");
System.out.println(fastFrameworkName);
System.out.println(authorName);
} @Test
public void testGetOrDefault() {
Properties properties = PropertyUtil.getProperties("fast");
Object age = PropertyUtil.getOrDefault(properties,"fast.framework.age",10);
Object defaultVal = PropertyUtil.getOrDefault(properties,"fast.framework.null",10);
System.out.println(age.toString());
System.out.println(defaultVal.toString());
}
}

Run Console:

1
10
fast
bysocket
1
10
fast
bysocket

相关对应代码分享在 Github 主页

二、JACKSON 案例

首先,加个Maven 依赖:


                <!-- Jackson -->
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-mapper-asl</artifactId>
<version>1.9.13</version>
</dependency>
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-jaxrs</artifactId>
<version>1.9.13</version>
</dependency>

然后直接上代码JSONUtil:

/**
* JSON 工具类
* <p/>
* Created by bysocket on 16/7/19.
*/
public class JSONUtil { private static final Logger LOGGER = LoggerFactory.getLogger(JSONUtil.class); /**
* 默认JSON类
**/
private static final ObjectMapper mapper = new ObjectMapper(); /**
* 将 Java 对象转换为 JSON 字符串
*
* @param object
* @param <T>
* @return
*/
public static <T> String toJSONString(T object) {
String jsonStr;
try {
jsonStr = mapper.writeValueAsString(object);
} catch (Exception e) {
LOGGER.error("Java Object Can't covert to JSON String!");
throw new RuntimeException(e);
}
return jsonStr;
} /**
* 将 JSON 字符串转化为 Java 对象
*
* @param json
* @param clazz
* @param <T>
* @return
*/
public static <T> T toObject(String json, Class<T> clazz) {
T object;
try {
object = mapper.readValue(json, clazz);
} catch (Exception e) {
LOGGER.error("JSON String Can't covert to Java Object!");
throw new RuntimeException(e);
}
return object;
} }

UT如下:

/**
* {@link JSONUtil} 测试用例
* <p/>
* Created by bysocket on 16/7/19.
*/
public class JSONUtilTest { @Test
public void testToJSONString() {
JSONObject jsonObject = new JSONObject(1, "bysocket", 33);
String jsonStr = JSONUtil.toJSONString(jsonObject);
Assert.assertEquals("{\"age\":1,\"name\":\"bysocket\",\"id\":33}", jsonStr);
} @Test(expected = RuntimeException.class)
public void testToJSONStringError() {
JSONUtil.toJSONString(System.out);
} @Test
public void testToObject() {
JSONObject jsonObject = new JSONObject(1, "bysocket", 33);
String jsonStr = JSONUtil.toJSONString(jsonObject);
JSONObject resultObject = JSONUtil.toObject(jsonStr, JSONObject.class);
Assert.assertEquals(jsonObject.toString(), resultObject.toString());
} @Test(expected = RuntimeException.class)
public void testToObjectError() {
JSONUtil.toObject("{int:1}", JSONObject.class);
}
} class JSONObject {
int age;
String name;
Integer id; public JSONObject() {
} public JSONObject(int age, String name, Integer id) {
this.age = age;
this.name = name;
this.id = id;
} public int getAge() {
return age;
} public void setAge(int age) {
this.age = age;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public Integer getId() {
return id;
} public void setId(Integer id) {
this.id = id;
} @Override
public String toString() {
return "JSONObject{" +
"age=" + age +
", name='" + name + '\'' +
", id=" + id +
'}';
}
}

Run Console(抛出了异常信息):

16/07/19 23:09:13 ERROR util.JSONUtil: JSON String Can't covert to Java Object!
16/07/19 23:09:13 ERROR util.JSONUtil: Java Object Can't covert to JSON String!

三、小结

相关对应代码分享在 Github 主页 请看到的Java小伙伴多交流多评论改进之。 参考 黄勇 smart

如以上文章或链接对你有帮助的话,别忘了在文章结尾处评论哈~ 你也可以点击页面右边“分享”悬浮按钮哦,让更多的人阅读这篇文章。

Code片段 : .properties属性文件操作工具类 & JSON工具类的更多相关文章

  1. 从接口自动化测试框架设计到开发(二)操作json文件、重构json工具类

    用例模板里的请求数据多,看起来很乱,所以可以通过访问另外一个文件的方式获取请求数据 把请求数据都放在一个json文件中 取出login的内容: import json fp = open('G:/un ...

  2. 解决读写properties属性文件

    package com.kzkj.wx.utils; import java.io.BufferedReader; import java.io.File; import java.io.FileIn ...

  3. Java读取利用java.util类Properties读取resource下的properties属性文件

    说明:upload.properties属性文件在resources下 import java.io.IOException;import java.io.InputStream;import jav ...

  4. java:Properties属性文件概念

    java:Properties属性文件概念 在java之前的国际化程序中提出了一个属性文件的概念,属性文件的后缀是:*.properties,那么在java中提供了意个属性文件的专门操作类,Prope ...

  5. 使用JAVA读写Properties属性文件

     使用JAVA读写Properties属性文件 Properties属性文件在JAVA应用程序中是经常可以看得见的,也是特别重要的一类文件.它用来配置应用程序的一些信息,不过这些信息一般都是比较少的数 ...

  6. 集合类——Map集合、Properties属性文件操作

    1.Map集合 Collection集合的特点是每次进行单个对象的保存,若要对一对对象来进行保存就只能用Map集合来保存.即Map集合中一次可以保存两个对象,且这两个对象的关系是key = value ...

  7. Java学习笔记——JDBC读取properties属性文件

    Java 中的 properties 文件是一种配置文件,主要用于表达配置信息,文件类型为*.properties,格式为文本文件. 文件的内容是格式是"键=值"(key-valu ...

  8. Java - 得到项目中properties属性文件中定义的属性值

    public static String getPropertiesValue(String fileName, String key) {   return ResourceBundle.getBu ...

  9. 【转载】C#工具类:实现文件操作File的工具类

    在应用程序的开发中,文件操作的使用基本上是必不可少的,FileStream类.StreamWriter类.Directory类.DirectoryInfo类等都是文件操作中时常涉及到的类,我们可以通过 ...

随机推荐

  1. 【笔记】select2的使用

    <script src="~/Scripts/jquery-1.10.2.js"></script> <script src="~/Cont ...

  2. CodeFirst写界面——自己写客户端UI库

    何谓CBS程序 CBS程序就是Client+Browser+Service的程序 纯CS程序写界面,有各种难处,那么我就在Client端引入Browser,让Browser渲染基于HTML的UI界面 ...

  3. 某些版本的IIS可能有SessionID混淆的Bug

    某公司为我服务的甲方公司开发一个挺重要的应用.已经上线了一年多了,不停的修修改改.也算正常使用.正所谓,秀恩爱,死得快.No 作就No Die.也少知道是那个Smarty Pants闲的蛋疼说新修改的 ...

  4. [ACM_数据结构] 竞赛排名

    比赛排名 Time Limit:1000MS  Memory Limit:32768K Description: 欢迎参加浙江工业大学“亚信联创杯”程序设计大赛,本次竞赛采用与 ACM/ICPC 相同 ...

  5. 2014-3-11 星期二 晴 [卓有成效 master 摸索计划方案]

    今日总结: [汇编]:StudyNew+ReView-->[中]上机,还行,学点新知识 [英语]:Study-->[中]发现这个要变得好啦 [----]:lib [----]:lib--& ...

  6. CheckStyle, 强制你遵循编码规范

    如今代码静态检查越来越重要,已经成为构建高质量软件的不可或缺的一个验证步骤.如果你使用的是java语言,那么CheckStyle则是一个利器. CheckStyle能够帮助程序员检查代码是否符合制定的 ...

  7. 构建单页Web应用

    摘自前端农民工的博客 让我们先来看几个网站: coding teambition cloud9 注意这几个网站的相同点,那就是在浏览器中,做了原先“应当”在客户端做的事情.它们的界面切换非常流畅,响应 ...

  8. [读书笔记]C#学习笔记八:StringBuilder与String详解及参数传递问题剖析

    前言 上次在公司开会时有同事分享windebug的知识, 拿的是string字符串Concat拼接 然后用while(true){}死循环的Demo来讲解.其中有提及string操作大量字符串效率低下 ...

  9. js时间函数

    时间 new Date() 获取时间,可以理解为是系统默认的函数. 从小括号里面获取系统时间日期,相当于在调用系统默认的函数. 年 getFullYear() 注意,有Full. 月 getMonth ...

  10. paip.提升性能----硬盘不同转速不同缓存对比转

    paip.提升性能----硬盘不同转速不同缓存对比转 西数 WDC WD2500BEVT-08A23T1 ( 250 GB / 5400 转/分 ) 5400转 8M缓存 单碟250 GB      ...