properties数据处理

Posted wd404

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了properties数据处理相关的知识,希望对你有一定的参考价值。

1、介绍

1.1 数据结构

properties数据指的是一组或多组键值对数据结构,list[list[str, str]]。

二维数组结构,其中一维的元素是长度为2的list,二维的元素是str类型,分别表示键和值。

1.2 场景

在诸多业务场景中,存在使用properties数据的需求。

  • 配置文件
  • 请求和响应头部
  • url的直接参数
  • 请求体部
  • cookies

1.3 函数和类

为了方便处理properties数据,定义相关的函数和类。之所以不直接使用list或dict进行处理,大概以下几点:

  • dict要求键是不可重复的,会自动去重。但是类似响应头部set-cookie字段是需要允许键重复的
  • list的copy是浅复制,但需求一般是深复制。所以需要定义函数和方法
  • dict和list都不强调元素是str类型,而properties函数和类都强调键和值都为str类型
  • 编写函数和类,能够显著的节俭代码,进行复用

2、PropertiesModule

定义了相关的函数

2.1 parse

parse(s, sep1, sep2, strip_flag=False)->list[list[str, str]]
  • 解析字符串为properties数据结构,即二维list,其中一维的元素是长度为2、元素为str的list
  • s,str类型,待解析字符串
  • sep1,str类型,键值对和键值对之间的分隔符
  • sep2,str类型,键和值之间的分隔符
  • strip_flag,bool类型,为True表示会对键和值进行去除首尾空白字符,即调用.strip()方法
  • 如果s、sep1、sep2任一者为空字符串,则直接返回空list []

2.2 toString

toString(arr, sep1, sep2)->str
  • 将properties数据结构,组装为str类型返回。如果arr长度为0,返回空字符串\'\'
  • arr,为properties数据结构,即二维list,其中一维的元素是长度为2、元素为str的list
  • sep1,str类型,键值对和键值对之间的分隔符
  • sep2,str类型,键和值之间的分隔符

 2.3 clone

clone(arr) -> list[list[str, str]]
  • 深克隆,即克隆二维的str字面值。而非浅克隆只克隆一维的地址
  • arr,为properties数据结构,即二维list,其中一维的元素是长度为2、元素为str的list

2.4 hasName

hasName(arr, name, ignore_case) -> bool
  • 判断properties数据结构中是否包含某键,包含则返回bool类型的True
  • arr,为properties数据结构,即二维list,其中一维的元素是长度为2、元素为str的list
  • name,str类型,待匹配键名称
  • ignore_case,bool类型,是否忽略大小写进行匹配。如果为True,会将各键转小写,以及name转小写进行匹配

2.5 getFirstValue

"""getFirstValue(arr, name, ignore_case) -> str/None"""
"""remove(arr, name, ignore_case)"""
update(arr: list, name: str, value: str, ignore_case: bool):
add(arr: list, name: str, value: str):
"""getNames(arr) -> list"""

3、PropertiesClasses

工程中properties文件处理方法类

功能:properties文件加载、取得key对应的值

 1 import java.util.ResourceBundle;
 2 
 3 /**
 4  * 工程中properties文件处理方法类
 5  */
 6 public class ConfigHolder {
 7     private static ResourceBundle bundle;
 8     
 9     /**
10      * 加载properties文件
11      */
12     private static void loadConfig() {
13         if(bundle == null) {
14             // 在class下有config.properties文件,如果在某包下,则如:ort.config
15             bundle = ResourceBundle.getBundle("config");
16         }
17     }
18     
19     /**
20      * 取得properties文件中指定key的值
21      * @param key
22      * @return
23      */
24     public static String getValue(String key) {
25         loadConfig();
26         return bundle.getString(key);
27     }    
28 }

 

以上是关于properties数据处理的主要内容,如果未能解决你的问题,请参考以下文章

properties数据处理

工程中properties文件处理方法类

修改与删除@property封装的数据属性

Properties集合

考虑 application.properties 的预加载数据的 Spring 数据最佳实践

struts2对properties资源的处理