java snakeyaml_SnakeYaml快速入门和使用

在SpringBoot里面我们经常会读取配置文件

目前常用的配置文件有两种格式:.properties 和 .yml,它们的区别主要是书写格式不同

1).properties

app.user.name = javastack

2).yml

app:

user:

name: javastack

另外,.yml 格式不支持 @PropertySource 注解导入配置。

今天主要介绍通过第三方工具来读取配置文件

SnakeYaml是一个完整的YAML1.1规范Processor,支持UTF-8/UTF-16,支持Java对象的序列化/反序列化,支持所有YAML定义的类型(map,omap,set,常量,具体参考

快速使用

要使用SnakeYaml,首先引入maven依赖:

org.yaml

snakeyaml

1.17

我们来完成一个最简单的yaml解析例子:

@Test

public void testLoad() {

String yamlStr = "key: hello yaml";

Yaml yaml = new Yaml();

Object ret = yaml.load(yamlStr);

System.out.println(ret);

}

结果输出:{key=hello yaml}

简介解释:

1,使用Yaml类,创建一个Yaml对象,所有的解析操作都是从这个对象开始;

2,声明了一个yaml的字符串(当然也可以使用yaml文档等),定义了一个对象:key: hello yaml;

3,使用Yaml对象的load方法 public Object load(String yaml)加载一段yaml字符串,返回解析之后的对象;

可以看到,实际创建的是一个Map:LinkedHashMap。

load/loadAll/loadAs 方法使用

Yaml的load方法可以传入多种参数类型:

public Object load(String yaml)

public Object load(InputStream io)

public Object load(Reader io)

三个方法都是通过传入的不同类型的内容,解析得到结果对象。需要注意一点的是,SnakeYaml通过读入的内容是否包含BOM头来判断输入流的编码格式。如果不包含BOM头,默认为UTF-8编码。

接下来上代码:

public class YmlUtil {

private static Map ymls = new HashMap<>();

private static ThreadLocal nowFileName = new ThreadLocal<>();

public static Logger log = LoggerFactory.getLogger(YmlUtil.class);

public static void loadYml(String fileName) throws IOException {

nowFileName.set(fileName);

try {

String outpath = System.getProperty("user.dir")+File.separator;

InputStream in = new FileInputStream(new File(outpath + String.format("%s.yml",fileName)));

if (!ymls.containsKey(fileName)) {

ymls.put(fileName, new Yaml().loadAs(in, LinkedHashMap.class));

}

}catch (IOException e){

InputStream in = YmlUtil.class.getClassLoader().getResourceAsStream(String.format("%s.yml",fileName));

if (!ymls.containsKey(fileName)) {

ymls.put(fileName, new Yaml().loadAs(in, LinkedHashMap.class));

}

}

}

public static Object getValue(String key) throws Exception {

String[] keys = key.split("[.]");

Map ymlInfo = (Map) ymls.get(nowFileName.get()).clone();

for (int i = 0; i < keys.length; i++) {

String keyStr = keys[i];

Object value = null;

if (StringUtils.isNumericSpace(keyStr)){

value = ymlInfo.get(Integer.parseInt(keyStr));

}else{

value = ymlInfo.get(keyStr);

}

if (i < keys.length - 1) {

ymlInfo = (Map) value;

} else if (value == null) {

return null;

} else {

return value;

}

}

throw new RuntimeException("It's impossible to get here...");

}

public static String getValue(String fileName, String key) {

Object obj = null;

try {

loadYml(fileName);

obj = getValue(key);

} catch (FileNotFoundException e) {

e.printStackTrace();

} catch (Exception e) {

e.printStackTrace();

}

String value  = StringUtil.nullToString(obj);

log.info(String.format("Get value [ %s ] by key [ %s ]",value,key));

return value;

}

public static String calibrationMap(String fileName,String firstKey,Map parameterMap){

Object obj = null;

String prompt = null;

try {

loadYml(fileName);

obj = getValue(firstKey);

if (obj instanceof Map){

prompt = calibration((Map) obj,parameterMap);

}else{

throw new RuntimeException("Check the calibration.YML file for format errors");

}

} catch (FileNotFoundException e) {

e.printStackTrace();

} catch (Exception e) {

e.printStackTrace();

}

return prompt;

}

public static String calibration(Map calibrationMap,Map parameterMap){

Iterator> iterator = calibrationMap.entrySet().iterator();

String prompt = null;

while (iterator.hasNext()){

Map.Entry entry = iterator.next();

String key = entry.getKey();

if (parameterMap.containsKey(key)){

Object parameterKey = parameterMap.get(key);

boolean flag = StringUtil.isEmpty(parameterKey);

if (flag){

prompt = entry.getValue();

break;

}

}else{

prompt = entry.getValue();

break;

}

}

return prompt;

}

public static void main (String [] args){

String path = YmlUtil.class.getClassLoader().getResource("application.yml").getPath();

System.err.println(path);

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我可以为您讲解JavaFX的快速入门。 首先,JavaFX是一个用于创建富客户端应用程序的框架。它提供了一套丰富的图形用户界面(GUI)控件、动画、图形效果等组件,使得开发者可以轻松地创建漂亮且交互性强的应用。 以下是JavaFX快速入门的步骤: 1. 安装JavaFX SDK:您需要从Oracle官网下载JavaFX SDK并安装,以便在您的开发环境中使用JavaFX。 2. 设置开发环境:您需要配置您的开发环境,以便能够使用JavaFX库和工具。这包括将JavaFX库添加到Java类路径中,以及设置JavaFX Scene Builder。 3. 创建JavaFX项目:您可以使用JavaFX插件来创建一个JavaFX项目。您可以在Eclipse或IntelliJ IDEA等IDE中安装JavaFX插件。 4. 创建JavaFX场景:您需要在JavaFX中创建一个场景。场景是JavaFX应用程序中的顶级容器,您可以将其他控件添加到场景中。 5. 添加控件:您可以将JavaFX控件添加到场景中,例如按钮、标签、文本框等。JavaFX提供了许多内置的控件,您也可以创建自定义控件。 6. 设置控件属性:您可以为每个控件设置属性,例如大小、位置、背景颜色等。JavaFX提供了许多属性,您也可以创建自定义属性。 7. 添加事件处理程序:您可以为每个控件添加事件处理程序,例如单击、键盘按下等。JavaFX提供了许多内置的事件处理程序,您也可以创建自定义事件处理程序。 8. 运行JavaFX应用程序:您可以在IDE中运行JavaFX应用程序,并在JavaFX场景中查看添加的控件和设置的属性。 希望这些步骤能够帮助您快速入门JavaFX。如果您有任何其他问题,请随时问我。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值