先引入需要的依赖

        <!--读取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());
} }

JAVA读取yml配置文件指定key下的所有内容的更多相关文章

  1. SpringBoot中如何优雅的读取yml配置文件?

    YAML是一种简洁的非标记语言,以数据为中心,使用空白.缩进.分行组织数据,从而使得表示更加简洁易读.本文介绍下YAML的语法和SpringBoot读取该类型配置文件的过程. 本文目录 一.YAML基 ...

  2. java读取properties配置文件总结

    java读取properties配置文件总结 在日常项目开发和学习中,我们不免会经常用到.propeties配置文件,例如数据库c3p0连接池的配置等.而我们经常读取配置文件的方法有以下两种: (1) ...

  3. C#读取xml文件指定节点下的值

    #region 读取xml文件指定节点下的值 XmlDocument xmlDoc = new XmlDocument(); xmlDoc.LoadXml(result); XmlNode root ...

  4. java操作office和pdf文件java读取word,excel和pdf文档内容

    在平常应用程序中,对office和pdf文档进行读取数据是比较常见的功能,尤其在很多web应用程序中.所以今天我们就简单来看一下Java对word.excel.pdf文件的读取.本篇博客只是讲解简单应 ...

  5. java读取properties配置文件信息

    一.Java Properties类 Java中有个比较重要的类Properties(Java.util.Properties),主要用于读取Java的配置文件,各种语言都有自己所支持的配置文件,配置 ...

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

    Java 开发中,需要将一些易变的配置参数放置再 XML 配置文件或者 properties 配置文件中.然而 XML 配置文件需要通过 DOM 或 SAX 方式解析,而读取 properties 配 ...

  7. java读取.properties配置文件的几种方法

    读取.properties配置文件在实际的开发中使用的很多,总结了一下,有以下几种方法(仅仅是我知道的):一.通过jdk提供的java.util.Properties类.此类继承自java.util. ...

  8. Java 读取 .properties 配置文件

    java 开发中,经常要读取 properties 配置文件,下面介绍几种读取方式: 1.基于 InputStream 读取配置文件 该方式的优点在于可以读取任意路径下的配置文件 Properties ...

  9. 【转载】java读取.properties配置文件的几种方法

    读取.properties配置文件在实际的开发中使用的很多,总结了一下,有以下几种方法(仅仅是我知道的):一.通过jdk提供的java.util.Properties类.此类继承自java.util. ...

随机推荐

  1. js实现div的碰壁反弹效果

    文章地址 https://www.cnblogs.com/sandraryan/ 需求: 写一个div,让div在父级进行匀速运动,碰到父级上下左右的边框,就向反方向运动. 碰壁反弹在游戏制作中很常用 ...

  2. Educational Codeforces Round 5(A,B题)

    虽然是水题但还是贴下代码把 A #include<cstring> #include<cstdio> using namespace std; ; char x[qq],y[q ...

  3. Python--day41--事件和信号量之模拟连接数据库并在连接三次后抛出连接超时异常

    #事件被创建的时候#False状态 #wait()阻塞#True状态 #wait() 非阻塞#clear 设置状态为False#set 设置状态为True #数据库 --- 文件夹#文件夹里有好多ex ...

  4. 浅谈集合框架四——集合扩展:集合循环输出方式及list输出方式的效率对比

    最近刚学完集合框架,想把自己的一些学习笔记与想法整理一下,所以本篇博客或许会有一些内容写的不严谨或者不正确,还请大神指出.初学者对于本篇博客只建议作为参考,欢迎留言共同学习. 之前有介绍集合框架的体系 ...

  5. Vue 项目构建完成 ----发布项目

    发布项目 cmd  命令行 npm run build      执行打包文件 完成后就会有  3 个文件夹    分别是: 文件夹 :build     config      dist    in ...

  6. springboot中使用spring-session实现共享会话到redis(二)

    上篇文章介绍了springboot中集成spring-session实现了将session分布式存到redis中.这篇在深入介绍一些spring-session的细节. 1.session超时: 在t ...

  7. jekyll 如何加密博客 防止抓取

    经常会发现自己的博客被一些垃圾网站抓取,我就在博客进行加密,在访问的时候进行解密,于是爬虫如果不执行js就无法获得内容 本文告诉大家如何加密博客 加密使用把文章内容转换为 Html 之后转换为 bas ...

  8. linux获知当前时间

    内核代码能一直获取一个当前时间的表示, 通过查看 jifies 的值. 常常地, 这个值只代 表从最后一次启动以来的时间, 这个事实对驱动来说无关, 因为它的生命周期受限于系统 的 uptime. 如 ...

  9. 关于better-scroll的使用注意事项

    better-scroll的原理 1.什么是 better-scroll? better-scroll 是一个移动端滚动的解决方案,它不仅可以做普通的滚动列表,还可以做轮播图.picker 等等. 2 ...

  10. 【t088】倒水

    Time Limit: 1 second Memory Limit: 128 MB [问题描述] 一天辰辰买了N个容量可以认为是无限大的瓶子,开始时每个瓶子里有1升水.接着辰辰发现瓶子实在太多了,于是 ...