首页>>后端>>java->yaml解析工具类(java)

yaml解析工具类(java)

时间:2023-12-02 本站 点击:0

简介

这是基于snakeyaml实现的一个读取yaml配置的工具类. 主要功能是获取指定层级之下的数据.

我不知道当初为什么写这个类了,但是我知道,我要是不把他发出来我就是白写了?

主要功能和使用方法

demo.yml

zdc:config:key:valuelist:-张三-李四map:-name:张三mapage:12-name:李四mapage:121

支持获取指定层级之后的内容,并返回Map形式或Obj形式 new ConfigBean("指定文件").prefix("zdc.config").getMap()

new ConfigBean("指定文件").prefix("zdc.config").getObj()

支持获取指定层级之后的对象数据,并格式化为指定类,如"zdc.config" : new ConfigBean("指定文件").prefix("zdc.config").getT(A.class)

支持获取list中指定数据,如"zdc.config.list.1" : new ConfigBean().prefix("zdc.config.list.1").getObj()

支持获取list中指定数据之后的数据,如"zdc.config.map.1.name"

new ConfigBean().prefix("zdc.config.list.1").getString()

具体代码

需要的maven包

<dependency><groupId>org.yaml</groupId><artifactId>snakeyaml</artifactId><version>1.25</version></dependency><dependency><groupId>commons-beanutils</groupId><artifactId>commons-beanutils-core</artifactId><version>1.8.3</version></dependency>

java代码

packagezdc.utils;importorg.apache.commons.beanutils.BeanUtils;importorg.yaml.snakeyaml.Yaml;importjava.io.InputStream;importjava.util.List;importjava.util.Map;/***读取resources下的yaml配置类**使用的maven包*<dependency>*<groupId>org.yaml</groupId>*<artifactId>snakeyaml</artifactId>*<version>1.25</version>*</dependency>*map->bean使用此包*<dependency>*<groupId>commons-beanutils</groupId>*<artifactId>commons-beanutils-core</artifactId>*<version>1.8.3</version>*</dependency>**使用方法*eg:*zdc:*config:*key:value*list:*-张三*-李四*map:*-name:张三map*age:12*-name:李四map*age:121**支持获取指定层级之后的数据,如"zdc.config":newConfigBean().prefix("zdc.config").getObj()**支持获取list中指定数据,如"zdc.config.list.1":newConfigBean().prefix("zdc.config.list.1").getObj()**支持获取list中指定数据之后的数据,如"zdc.config.map.1.name":newConfigBean().prefix("zdc.config.list.1").getString()**@authorZDC*/publicclassConfigBean{/***读取的资源名*/privateStringfileName="application.yml";/***获取的对象*/privateObjecttemp;/***创建一个资源获取对象,默认获取resources下的application.yml文件*/publicConfigBean(){this.load();}/***创建一个资源获取对象,默认获取resources下的fileName文件*@paramfileName*/publicConfigBean(StringfileName){this.fileName=fileName;this.load();}/***加载指定的文件*/privateConfigBeanload(){Yamlyaml=newYaml();InputStreaminputStream=this.getClass().getClassLoader().getResourceAsStream(this.fileName);this.temp=yaml.load(inputStream);returnthis;}/***eg"zdc.config.list"*eg""*@paramprefix*/publicConfigBeanprefix(Stringprefix){if(prefix==null||"".equals(prefix.trim())){returnthis;}//获取层级关系String[]keys=prefix.trim().split("\\.");for(Stringkey:keys){//判断数据类型if(this.tempinstanceofMap){this.temp=((Map)this.temp).get(key);}elseif(this.tempinstanceofList){if(isNumeric(key)){this.temp=((List)this.temp).get(Integer.parseInt(key));}else{thrownewRuntimeException(String.format("当前层级类型为List,不能使用[%s]获取子集数据",key));}}else{thrownewRuntimeException("暂时没有解析该类型或不支持再次解析");}}returnthis;}/***返回对象类型的数据,可能是List,Map,Obj*@return*/publicObjectgetObj(){returnthis.temp;}/***返回Map类型的数据*@return*/publicMapgetMap(){if(this.tempinstanceofMap){return(Map)this.temp;}returnnull;}/***返回List类型的数据*@return*/publicListgetList(){if(this.tempinstanceofList){return(List)this.temp;}returnnull;}/***返回对象类型数据,如果集成其他类库可以直接调用其他类库的map2bean方法该处引用的是commons-beanutils-core,可以根据自己本地环境替换**@paramclazz*@param<T>*@return*/public<T>TgetT(Class<T>clazz)throwsException{Tobj=clazz.newInstance();Mapmap=this.getMap();BeanUtils.populate(obj,map);returnobj;}/***返回String类型的数据*@return*/publicStringgetString(){returnthis.temp==null?"":this.temp.toString();}/***返回Integer类型的数据*@return*/publicIntegergetInteger(){Stringstring=getString();returnstring!=null?Integer.parseInt(string):null;}//TODO可以自定也解析其他类型/***判断是否是数字*@paramcs*@return*/publicstaticbooleanisNumeric(finalCharSequencecs){if(cs==null||cs.length()==0){returnfalse;}finalintsz=cs.length();for(inti=0;i<sz;i++){if(!Character.isDigit(cs.charAt(i))){returnfalse;}}returntrue;}}

这个系列的文章,总体来说是一些杂乱的记录.

其中的内容可能是在之前某个需要的时候记录下来的,当时需要,当时很有用.

但是在后续更多的时间里,他被封禁到了小角落.

你看不看,他都在那里,他并非一无是处.

你看到这里就给个三连吧

作者:ZOUZDC链接:https://juejin.cn/post/7028963866063306760


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:/java/10452.html