如何基于JAVA读取yml配置文件指定key内容

这篇文章主要介绍了如何基于JAVA读取yml配置文件指定key内容,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

先引入需要的依赖

<!--读取yml文件-->
    <dependency>
      <groupId>org.yaml</groupId>
      <artifactId>snakeyaml</artifactId>
      <version>1.23</version>
    </dependency>

读取YML文件工具类的代码

import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.util.ResourceUtils;
import org.yaml.snakeyaml.Yaml;

import java.io.*;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;

/**
 * @author hunmeng
 * @create 2020-01-10 20:34
 */
public class YmlUtils {

  private static final Logger LOGGER = LoggerFactory.getLogger(YmlUtils.class);

  private static String bootstrap_file = "classpath:application-test.yml";

  private static Map<String,String> result = new HashMap<>();

  /**
   * 根据文件名获取yml的文件内容
   * @param filePath
   * @param keys 第一个参数对应第一个key,第二个参数对应第二个key 比如spring.name下的所有 就是两个参数、
   *       getYmlByFileName(bootstrap_file,"spring", "name");
   * @return
   */
  public static Map<String,String> getYmlByFileName(String filePath, String... keys) {
    result = new HashMap<>();
    if(filePath == null) filePath = bootstrap_file;
    InputStream in = null;
    try {
      File file = ResourceUtils.getFile(filePath);
      in = new BufferedInputStream(new FileInputStream(file));
      Yaml props = new Yaml();
      Object obj = props.loadAs(in,Map.class);
      Map<String,Object> param = (Map<String, Object>) obj;

      for(Map.Entry<String,Object> entry:param.entrySet()){
        String key = entry.getKey();
        Object val = entry.getValue();
        if (keys.length != 0 && !keys[0].equals(key)){
          continue;
        }
        if(val instanceof Map){
          forEachYaml(key,(Map<String, Object>) val, 1, keys);
        }else{
          result.put(key, val.toString());
        }
      }
      return result;
    } catch (FileNotFoundException e) {
      LOGGER.error(e.getMessage(),e);
    }finally {
      if (in != null){
        try {
          in.close();
        } catch (IOException e) {
          LOGGER.error(e.getMessage(),e);
        }
      }
    }
    return null;
  }

  /**
   * 根据key获取值
   * @param key
   * @return
   */
  public static String getValue(String key) throws FileNotFoundException {
    Map<String,String> map = getYmlByFileName(null);
    if(map==null)return null;
    return map.get(key);
  }

  /**
   * 遍历yml文件,获取map集合
   * @param key_str
   * @param obj
   * @param i
   * @param keys
   * @return
   */
  public static Map<String,String> forEachYaml(String key_str,Map<String, Object> obj, int i, String... keys){
    for(Map.Entry<String,Object> entry:obj.entrySet()){
      String key = entry.getKey();
      Object val = entry.getValue();
      if (keys.length > i && !keys[i].equals(key)){
        continue;
      }
      String str_new = "";
      if(StringUtils.isNotEmpty(key_str)){
        str_new = key_str+ "."+key;
      }else{
        str_new = key;
      }
      if(val instanceof Map){
        forEachYaml(str_new,(Map<String, Object>) val, ++i, keys);
        i--;
      }else{

        result.put(str_new,val.toString());
      }
    }

    return result;
  }

  /**
   * 获取bootstrap.yml的name
   * @return
   */
  public static String getApplicationName() throws FileNotFoundException {
    return getYmlByFileName(bootstrap_file).get("server.port");
  }

  /**
   * 获取bootstrap.yml的name
   * @return
   */
  public static String getApplicationName1() throws FileNotFoundException {
    String name = getYmlByFileName(bootstrap_file).get("spring.application.name");
    return name + "center";
  }

  public static void main(String[] args) throws FileNotFoundException {

    Map<String, String> ymlByFileName = getYmlByFileName(bootstrap_file,"spring");
    Set<Map.Entry<String, String>> entries = ymlByFileName.entrySet();
    for (Map.Entry<String, String> entry : entries) {
      System.out.println(entry.getKey()+"==="+entry.getValue());
    }

    System.out.println(getApplicationName());
  }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Java中spring读取配置文件的几种方法示例

    Spring读取配置XML文件分三步: 一.新建一个Java Bean: package springdemo; public class HelloBean { private String helloWorld; public String getHelloWorld() { return helloWorld; } public void setHelloWorld(String helloWorld) { this.helloWorld = helloWorld; } } 二.构建一个配

  • Java读取.properties配置文件方法示例

    一.介绍 Properties文件在Java中主要为配置文件,文件类型为:.properties,格式为文本文件,内容格式为"键=值" 二.读取 这里我采用的是getResourceAsStream的文件读取方法 如果想要使用这个方法,则需要了解一些基本使用信息: 1.读取文件路径范围:只局限于工程的源文件中 2.文件访问形式:带"/"是绝对路径,不带"/"是相对路径 3.读取文件类型:主要为:.properties文件,.xml文件 三.使用

  • java读取properties配置文件的方法

    本文实例讲述了java读取properties配置文件的方法.分享给大家供大家参考.具体分析如下: 这两天做java项目,用到属性文件,到网上查资料,好半天也没有找到一个满意的方法能让我读取到.properties文件中属性值,很是郁闷,网上讲的获取属性值大概有以下方法,以下三种方法逐渐优化,以达到最好的效果以下都以date.properties文件为例,该文件放在src目录下,文件内容为: startdate=2011-02-07 totalweek=25 方法一: public class

  • Java开发中读取XML与properties配置文件的方法

    相关阅读: 使用Ajax进行文件与其他参数的上传功能(java开发) 1. XML文件: 什么是XML?XML一般是指可扩展标记语言,标准通用标记语言的子集,是一种用于标记电子文件使其具有结构性的标记语言. 2.XML文件的优点: 1)XML文档内容和结构完全分离. 2)互操作性强. 3)规范统一. 4)支持多种编码. 5)可扩展性强. 3.如何解析XML文档: XML在不同的语言中解析XML文档都是一样的,只不过实现的语法不一样,基本的解析方式有两种,一种是SAX方式,是按照XML文件的顺序一

  • Java语言读取配置文件config.properties的方法讲解

    应用场景 有些时候项目中会用到很多路径,并且很可能多个路径在同一个根目录下,那为了方便配置的修改,达到只修改根目录即可达到一改全改的效果,此时就会想到要是有变量就好了: 另外有时候路径中的文件名是不确定的,要靠业务程序运行时去判断文件名应该如何设置,而又希望此文件下的目录名是确定的,那此时用变量也是比较好的解决方式. 一.配置文件config.properties是放在src根目录下的:例如我的是 /PropertiesTest/src/com/xuliugen/project/type.pro

  • java中读取配置文件中数据的具体方法

    1.先在项目中创建一个包(如:config),再创建一个配置文件(如:a.properties),添加配置信息如下:比如: 复制代码 代码如下: name=kakaage=28 2.代码: 复制代码 代码如下: import java.io.IOException; import java.io.InputStream; import java.util.Properties; public class PropertyTest { public static void main(String[

  • Java中的几种读取properties配置文件的方式

    相信对于一名JAVA开发者开说properties文件一定再熟悉不过了,比如一下配置: config.properties会经常存放一些系统常量,版本号,路径之类的 database.properties存放数据库的连接参数 log4j.properties 日志的一些基本配置 redis.properties 缓存数据库的一些配置 当然前缀是根据用能自行定义的,一般来说文件的内容的格式是"键=值"的格式,文本注释信息可以用"#"来注释,下面来说说开发中如何读写pr

  • Java读取properties配置文件时,出现中文乱码的解决方法

    如下所示: public static String getConfig(String key) { Properties pros = new Properties(); String value = ""; try { pros.load(new InputStreamReader(Object.class.getResourceAsStream("/properties.properties"), "UTF-8")); value = pr

  • Java 读取、获取配置文件.properties中的数据

    java获取配置文件.properties中的数据,具体内容如下所示: 方法太多,只写一种比较简单的. 文件test1.properties内容 test1 = 123; test2=3211 Properties prop = new Properties(); prop.load(new FileInputStream("src/test1.properties")); System.out.println(prop.get("test1")); 输出 123;

  • 如何基于JAVA读取yml配置文件指定key内容

    这篇文章主要介绍了如何基于JAVA读取yml配置文件指定key内容,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 先引入需要的依赖 <!--读取yml文件--> <dependency> <groupId>org.yaml</groupId> <artifactId>snakeyaml</artifactId> <version>1.23</version>

  • Java读取.properties配置文件的几种方式

    Java 开发中,需要将一些易变的配置参数放置再 XML 配置文件或者 properties 配置文件中.然而 XML 配置文件需要通过 DOM 或 SAX 方式解析,而读取 properties 配置文件就比较容易. 介绍几种读取方式: 1.基于ClassLoder读取配置文件 注意:该方式只能读取类路径下的配置文件,有局限但是如果配置文件在类路径下比较方便. Properties properties = new Properties(); // 使用ClassLoader加载propert

  • Java读取properties配置文件的8种方式汇总

    目录 一.前言 二.Properties类 三.Properties常用方法实践 四.Java写入Properties 五.Java读取Properties 六.Properties配合Spring框架使用 七.完整代码 总结 一.前言 在做Java项目开发过程中,涉及到一些数据库服务连接配置.缓存服务器连接配置等,通常情况下我们会将这些不太变动的配置信息存储在以 .properties 结尾的配置文件中.当对应的服务器地址或者账号密码信息有所变动时,我们只需要修改一下配置文件中的信息即可.同时

  • Springboot 读取 yml 配置文件里的参数值

    目录 方式一 方式二 总结 方式一 1.yml配置 yml配置(示例): api: mes: MES_SOCKET: http://192.168.99.140:8081 2.读取 代码如下(示例): package com.jack.modules.wms.api.common.config; import lombok.Data; import org.springframework.boot.context.properties.ConfigurationProperties; impor

  • java读取文件里面部分汉字内容乱码的解决方案

    java读取文件里面部分汉字内容乱码 读取一个txt文件,到代码中打印出来,发票有部分汉字的内容是乱码的. 我开始的方式是这样的, 如下,这是完全错误的,汉字是两个字节的,如果每次读固定个字节,可能会把汉字截断. 就会出现部分乱码的情况. package susq.path;​ import java.io.File; import java.io.FileInputStream; import java.io.IOException; ​ /** * @author susq * @since

  • 基于java读取并引用自定义配置文件

    首先在resources目录创建自定义的配置文件 配置文件的格式: 写工具类,得到配置参数 import java.io.IOException; import java.io.InputStream; import java.util.Properties; public class MyConfig { public static Properties myProp = new Properties(); public static InputStream myResource = MyCo

  • Spring基于注解读取外部配置文件

    一.使用注解@PropertySource 指定路径 使用 @PropertySource 指定配置文件路径,支持 properties 和 XML 的配置文件,但不支持 yml. 属性赋值 可以用注解 @Value 对属性直接赋值.${}获取配置文件的值.SPEL表达式#{}. 直接赋值:@Value("name jack") 读取配置文件:@Value("${user.age}") 指定默认值:@Value("${user.desc:default d

随机推荐