Java Yml格式转换为Properties

这篇具有很好参考价值的文章主要介绍了Java Yml格式转换为Properties。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

问题引入

使用在线的yml转换properties, 发现有属性内容漏了,网站地址https://tooltt.com/yaml2properties/。
于是自己动手写个转换工具类,自测过多个 yml 文件,目前没发现遗漏的。

需要转换的yaml文件如下

spring:
  application:
    name: xtoon-sys-server
  cloud:
    nacos:
      config:
        server-addr: localhost:8848
        file-extension: yaml
        enabled: true
  boot:
    admin:
      client:
        url: http://localhost:5001
        username: admin
        password: admin
        instance:
          prefer-ip: true

management:
  health:
    redis:
      enabled: false
  endpoint:
    health:
      show-details: always
  endpoints:
    web:
      exposure:
        include: "*"

在线转换网站转换的结果

spring.application.name=xtoon-sys-server
spring.cloud.nacos.config.server-addr=localhost:8848
spring.cloud.nacos.config.file-extension=yaml
spring.boot.admin.client.url=http://localhost:5001
spring.boot.admin.client.username=admin
spring.boot.admin.client.password=admin
management.endpoint.health.show-details=always
management.endpoints.web.exposure.include=*

正确的转换结果应该如下

spring.application.name=xtoon-sys-server
spring.cloud.nacos.config.server-addr=localhost:8848
spring.cloud.nacos.config.file-extension=yaml
spring.cloud.nacos.config.enabled=true
spring.boot.admin.client.url=http://localhost:5001
spring.boot.admin.client.username=admin
spring.boot.admin.client.password=admin
spring.boot.admin.client.instance.prefer-ip=true
management.health.redis.enabled=false
management.endpoint.health.show-details=always
management.endpoints.web.exposure.include=*

在线网站转换结果截图如下
yaml转properties,# Java,后端,java,yaml,properties,格式转换
对比原始文本和转换结果,发现少了几个属性

spring.cloud.nacos.config.enabled=true
spring.boot.admin.client.instance.prefer-ip=true
management.health.redis.enabled=false

这几个结果有些特征,value值是boolean类型的。不知道还有没有其它类型的数据会有遗漏的?

转换代码

导入yaml读取jar

<dependency>
      <groupId>org.yaml</groupId>
      <artifactId>snakeyaml</artifactId>
      <version>1.33</version>
 </dependency>

Java 代码

package com.scd.tool;

import org.yaml.snakeyaml.Yaml;

import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Set;

/**
 * @author James
 */
public class YamlToProperties {

    public static void main(String[] args) {
        Yaml yaml = new Yaml();
        String filePath = "file/yaml/bootstrap.yml";
        try (InputStream inputStream = new FileInputStream(filePath)) {
            Object object = yaml.load(inputStream);
            List<String> resultList = travelRootWithResult(object);
            System.out.println(resultList);
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }

    private static List<String> travelRootWithResult(Object object) {
        List<String> resultList = new ArrayList<>();
        if (object instanceof LinkedHashMap) {
            LinkedHashMap map = (LinkedHashMap) object;
            Set<Object> keySet = map.keySet();
            for (Object key : keySet) {
                List<String> keyList = new ArrayList<>();
                keyList.add((String) key);
                travelTreeNode(map.get(key), keyList, resultList);
            }
        }
        return resultList;
    }
    

    private static void travelTreeNode(Object obj, List<String> keyList, List<String> resultList) {
        if (obj instanceof LinkedHashMap) {
            LinkedHashMap linkedHashMap = (LinkedHashMap) obj;
            linkedHashMap.forEach((key, value) -> {
                if (value instanceof LinkedHashMap) {
                    keyList.add((String) key);
                    travelTreeNode(value, keyList, resultList);
                    keyList.remove(keyList.size() - 1);
                } else {
                    StringBuilder result = new StringBuilder();
                    for (String strKey : keyList) {
                        result.append(strKey).append(".");
                    }
                    result.append(key).append("=").append(value);
                    System.out.println(result);
                    resultList.add(result.toString());
                }
            });
        } else {
            StringBuilder result = new StringBuilder();
            result.append(keyList.get(0)).append("=").append(obj);
            System.out.println(result);
            resultList.add(result.toString());
        }
    }
}

运行结果如下,对比之后发现没有出现遗漏的

spring.application.name=xtoon-sys-server
spring.cloud.nacos.config.server-addr=localhost:8848
spring.cloud.nacos.config.file-extension=yaml
spring.cloud.nacos.config.enabled=true
spring.boot.admin.client.url=http://localhost:5001
spring.boot.admin.client.username=admin
spring.boot.admin.client.password=admin
spring.boot.admin.client.instance.prefer-ip=true
management.health.redis.enabled=false
management.endpoint.health.show-details=always
management.endpoints.web.exposure.include=*

大家使用的时候只需要改一下filePath

代码解读

可以把yml 看成多个树,问题就转换成了遍历树的问题,我们需要获取树的路径以及子节点。树的路径是properties的key, 叶子节点是properties的value文章来源地址https://www.toymoban.com/news/detail-661873.html

到了这里,关于Java Yml格式转换为Properties的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Java时间转换问题 [Failed to convert property value of type ‘java.lang.String‘ to required type ‘java.

    default message [Failed to convert property value of type ‘java.lang.String’ to required type \\\'java. 遇到java接收前端日期字符串返回到后端Date字段时报错。 通过在报错字段上添加@DateTimeFormat(pattern = “yyyy-MM-dd”)进行解决。 接下来是分析了引用一位博主的博客,我在简单总结一下: @JsonFormat注

    2024年02月13日
    浏览(39)
  • Java——时间戳和时间格式转换

    时间戳(TimeStamp):通常是一个字符序列,唯一地标志某一刻的时间。Java 中时间戳是指格林威治时间1970年01月01日00时00分00秒起至现在的总毫秒数。 一、获取时间戳的方式 二、Date类 1、无参构造方法——返回结果Thu Dec 15 09:55:39 CST 2022 2、有参构造方法——已废弃 三、时间格式

    2024年02月11日
    浏览(37)
  • 玩转Java时间格式转换(亲测可用)

    相信很多小伙伴在时间格式转换的时候非常头疼,我也是如此,所以总结以下的方法供大家使用,都是我自己用过没问题的大家开箱即用! 一、获取当前时间 二、获取当前时间戳 三、日期转时间戳 四、时间戳转换为时间 五、时间转换为时间戳 六、日期转字符串 七、字符串

    2024年02月13日
    浏览(48)
  • JAVA版网易云音乐格式转换器

    网易云音乐下载的歌曲格式多为ncm,这种格式除了用网易云音乐App其他播放器无法播放。于是想寻求其格式转换的工具,搜索了下确实有相关工具,不过很多山寨工具需要收费。然后又试图寻求其他方式,经过一番调研发现这玩意其实早已经被人扒光了到处裸奔(我估摸着这

    2024年02月21日
    浏览(63)
  • java中对象和JSON格式的转换

    JSON(javaScript Object Notation) 是 一种轻量级的数据交换格式 ,具有良好的可读性和可拓展性。 它采用键值对的方式表示数据,支持基本数据类型和复合数据类型。可用于描述结构化数据和非结构化数据。 结构 对象结构(无序): 无序的对象结构在不同语言中称法不同 对象(

    2024年02月04日
    浏览(39)
  • Java处理时间格式CST和GMT转换

    在编程中处理日期格式时,通常会遇到带CST或GMT的时间格式,它们代表什么,如何转换呢? CST和GMT时间示例如下: Mon Oct 26 15:19:15 CST 2022 Thu, 22 Sep 2022 09:41:01 GMT 这个代号缩写,并不是一个统一标准,目前,可以同时代表如下 4 个不同版本的时区概念(要根据上下文语义加以区

    2024年02月06日
    浏览(31)
  • 解决:Java后端返回给前端的Date格式数据相差8小时的问题

    问题描述: 后端得到的数据是对的,但是返回给前端后,数据比原数据慢了8小时。 原因: json数据在返回浏览器端是会被spring-boot默认的Jackson框架转换,而Jackson框架默认的时区GMT(相对于中国是少了8小时)。 解决: 在application.yml文件中,配置

    2024年04月16日
    浏览(63)
  • Java将JPG/PNG图片转换为WEBP格式,以及WEBP转换成JPG/PNG格式

    越来越多的网站采用了webp格式的图片,webp占用空间小,传送更快,画质不降低。经常会遇到图片格式转换的需求,我们可以借助第三方的包,通过Java实现来PG/PNG图片转换为WEBP格式,以及WEBP转换成JPG/PNG格式。 1.maven项目依赖 在pom.xml加入下面的内容 2.代码分享

    2024年02月08日
    浏览(46)
  • Java中常用的几种JSON格式的转换

    JSON在传输数据时,起到了特别大的作用,因此出现了各种各样五花八门的JSON转换第三方包,在这里做一个汇总,总结一些常用的 目录 com.alibaba.fastjson 常用的API Lsit---JSON JSON字符串---List 6种json转MAP json-lib(即net.sf.json ) 常用的API 1.把java 对象列表转换为json对象数组,并转为

    2024年02月04日
    浏览(79)
  • Java:日期毫秒值和常见日期时间格式相互转换

    本文介绍了Java中,日期毫秒值和常见日期格式相互转换。 提示:以下是本篇文章正文内容,下面案例可供参考 代码示例: 代码示例: 如果想将指定时间转换为毫秒值,相对比较麻烦,这里提供两种方法供参考 利用Calendar.set() 利用DateFormat.parse() 本文介绍了Java中如何将毫秒

    2024年02月16日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包