import org.yaml.snakeyaml.DumperOptions;
import org.yaml.snakeyaml.Yaml;import java.io.*;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Set;/*** @author Relic* @desc yml工具类* @date 2020-02-27 17:19*/
public class YamlUtils {private final static DumperOptions OPTIONS = new DumperOptions();private static File file;private static InputStream ymlInputSteam;private static Object CONFIG_MAP;private static Yaml yaml;static {//将默认读取的方式设置为块状读取OPTIONS.setDefaultFlowStyle(DumperOptions.FlowStyle.BLOCK);}/*** 使用其他方法之前必须调用一次 设置yml的输出文件,当没有设置输入流时可以不设置输入流,默认以此文件读入** @param file 输出的文件*/public static void setYmlFile(File file) throws FileNotFoundException {YamlUtils.file = file;if (ymlInputSteam == null) {setYmlInputSteam(new FileInputStream(file));}}/*** 使用其他方法之前必须调用一次 设置yml的输入流** @param inputSteam 输入流*/public static void setYmlInputSteam(InputStream inputSteam) {ymlInputSteam = inputSteam;yaml = new Yaml(OPTIONS);CONFIG_MAP = yaml.load(ymlInputSteam);}/*** 根据键获取值** @param key 键* @return 查询到的值*/@SuppressWarnings("unchecked")public static Object getByKey(String key) {if (ymlInputSteam == null) {return null;}String[] keys = key.split("\\.");Object configMap = CONFIG_MAP;for (String s : keys) {if (configMap instanceof Map) {configMap = ((Map<String, Object>) configMap).get(s);} else {break;}}return configMap == null ? "" : configMap;}public static void saveOrUpdateByKey(String key, Object value) throws IOException {KeyAndMap keyAndMap = new KeyAndMap(key).invoke();key = keyAndMap.getKey();Map<String, Object> map = keyAndMap.getMap();map.put(key, value);//将数据重新写回文件yaml.dump(CONFIG_MAP, new FileWriter(file));}public static void removeByKey(String key) throws Exception {KeyAndMap keyAndMap = new KeyAndMap(key).invoke();key = keyAndMap.getKey();Map<String, Object> map = keyAndMap.getMap();Map<String, Object> fatherMap = keyAndMap.getFatherMap();map.remove(key);if (map.size() == 0) {Set<Map.Entry<String, Object>> entries = fatherMap.entrySet();for (Map.Entry<String, Object> entry : entries) {if (entry.getValue() == map) {fatherMap.remove(entry.getKey());}}}yaml.dump(CONFIG_MAP, new FileWriter(file));}private static class KeyAndMap {private String key;private Map<String, Object> map;private Map<String, Object> fatherMap;public KeyAndMap(String key) {this.key = key;}public String getKey() {return key;}public Map<String, Object> getMap() {return map;}public Map<String, Object> getFatherMap() {return fatherMap;}@SuppressWarnings("unchecked")public KeyAndMap invoke() {if (file == null) {System.err.println("请设置文件路径");}if (null == CONFIG_MAP) {CONFIG_MAP = new LinkedHashMap<>();}String[] keys = key.split("\\.");key = keys[keys.length - 1];map = (Map<String, Object>) CONFIG_MAP;for (int i = 0; i < keys.length - 1; i++) {String s = keys[i];if (map.get(s) == null || !(map.get(s) instanceof Map)) {map.put(s, new HashMap<>(4));}fatherMap = map;map = (Map<String, Object>) map.get(s);}return this;}}
}

使用方法

String yml_path = upload_url+"/application-druid.yml";File yml = new File(yml_path);if(!yml.exists()){return AjaxResult.error(yml+"不存在");}try{YamlUtils.setYmlFile(yml);//System.out.println(YamlUtils.getByKey("athena.upload.time"));String url = dbIp;YamlUtils.saveOrUpdateByKey("spring.datasource.druid.master.url", url);YamlUtils.saveOrUpdateByKey("spring.datasource.druid.master.password", dbPwd);//YamlUtils.removeByKey("athena.upload.time");}catch (Exception e){e.printStackTrace();return AjaxResult.error("处理yml文件失败");}

java修改yml文件相关推荐

  1. java解析yml文件_如何基于JAVA读取yml配置文件指定key内容

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

  2. yml的基本语法,以及java读取yml文件

    目录 spring Boot层级结构 基本概念 演示 spring Boot层级结构 static:保存所有的静态资源:js css images: templates:保存所有模板页面:(Sprin ...

  3. java解析yml文件_java读取解析application.yml

    java读取解析application.yml 不用依赖spring容器,可单独使用. bug已修改... 第一步.首先要2个jar com.fasterxml.jackson.dataformat ...

  4. 2021年“金三银四”来袭!java修改json文件

    第一个 分布式:限流 1.1 ZooKeeper+Nginx面试常备题(附答案) ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Ha ...

  5. java 修改文件内容_用Java修改现有文件内容

    小编典典 如对类似问题的公认答案中所建议: 同时以写入模式打开一个临时文件,对于每一行,读取它,必要时进行修改,然后写入该临时文件.最后,删除原始文件并重命名临时文件. 根据您的实现,类似于以下内容: ...

  6. java 修改ini文件_java读取和修改ini配置文件 | 学步园

    /* * ConfigurationFile.java * * Created on 2009年4月15日, 下午1:36 * * To change this template, choose To ...

  7. java 修改ini文件_Java读取和修改ini配置文件

    /** * 修改ini配置文档中变量的值 * @param file 配置文档的路径 * @param section 要修改的变量所在段名称 * @param variable 要修改的变量名称 * ...

  8. Java创建SpringBoot服务时yml文件显示粉色不显示绿色小叶子

    在做项目的时候遇到了一个问题:在搭建后台环境的时候创建Spring服务时yml文件显示粉色不显示绿色小叶子,而且一开始没注意,目录结构下的java目录和resources目录也不显示应有的蓝色和黄色的 ...

  9. java读取并修改xml文件

    java读取并修改xml文件 java如何读取xml并且修改xml文件呢?代码如下: //复制模板xnl File file = new File(xmlSavePath + "/mb.xm ...

  10. Java修改文件夹下所有文件名

    惯例: 我是温浩然: 最近,由于某些特殊情况,需要在一个文件夹下,修改所有文件的名字, 所有文件名加前缀. 代码如下: import java.io.File; public class Demo{p ...

最新文章

  1. springboot 中的 这种策略模式运用实战
  2. BUUCTF(pwn) jarvisoj_level4 栈溢出,泄露libc
  3. ensp支持哪个版本virtualbox_如何在 Fedora 中安装 VirtualBox
  4. 双栈排序java_双栈排序(Java)
  5. 51 java_51javacms
  6. 温故而知新:HttpApplication,HttpModule,HttpContext及Asp.Net页生命周期
  7. loadrunner参数化excel数据
  8. 为什么手机升级系统反应慢了_手机卡顿反应慢怎么解决?久用不卡顿的手机盘点...
  9. 浏览器皮肤_和平精英返场皮肤投票时间是什么时候?投票地址入口介绍-手游资讯...
  10. Qt4项目迁移到Qt5问题:greaterThan(QT_MAJOR_VERSION, 4): QT += widgets .
  11. 推荐给java新手的JAVA零基础入门书籍
  12. 前端中用手机拍照压缩,上传图片压缩
  13. centos7中安装nginx步骤详解
  14. 《权力的游戏》里,是谁活成了史诗?
  15. 2019-11-11
  16. c语言中用什么表示真假,C语言中如何表示“真”和“假”?系统如何判断一个量的“真”和“假”?...
  17. thymeleaf模板+Shiro标签对按钮权限的控制
  18. 买不起switch的人如何使用手机+平板玩Just Dance
  19. 笔记本内存和台式机内存的区别
  20. linux 开启终端256色支持

热门文章

  1. 【吾爱破解第二期】操作学习笔记
  2. ROS做端口映射DDNS的N个做法详细教程
  3. [软件工程] 可行性研究
  4. lodop 调用打印机打印条码
  5. 转android gralloc流程分析for msm8960
  6. 北大青鸟linux运维,北大青鸟幸福IT学院:Linux运维学习路线,实用Linux教程,推荐学习收藏...
  7. 2017中兴捧月算法精英挑战赛-迪杰斯特拉
  8. 电骡服务器搜索文件排序,电骡搜中文名资源一定要注意的技巧及其他
  9. 机房服务器配置方案文件,机房改造/机房搬迁实施方案及步骤
  10. 【PAT】A1150 Travelling Salesman Problem【中国邮递员问题】