java修改yml文件
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文件相关推荐
- java解析yml文件_如何基于JAVA读取yml配置文件指定key内容
这篇文章主要介绍了如何基于JAVA读取yml配置文件指定key内容,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 先引入需要的依赖 org.yaml ...
- yml的基本语法,以及java读取yml文件
目录 spring Boot层级结构 基本概念 演示 spring Boot层级结构 static:保存所有的静态资源:js css images: templates:保存所有模板页面:(Sprin ...
- java解析yml文件_java读取解析application.yml
java读取解析application.yml 不用依赖spring容器,可单独使用. bug已修改... 第一步.首先要2个jar com.fasterxml.jackson.dataformat ...
- 2021年“金三银四”来袭!java修改json文件
第一个 分布式:限流 1.1 ZooKeeper+Nginx面试常备题(附答案) ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Ha ...
- java 修改文件内容_用Java修改现有文件内容
小编典典 如对类似问题的公认答案中所建议: 同时以写入模式打开一个临时文件,对于每一行,读取它,必要时进行修改,然后写入该临时文件.最后,删除原始文件并重命名临时文件. 根据您的实现,类似于以下内容: ...
- java 修改ini文件_java读取和修改ini配置文件 | 学步园
/* * ConfigurationFile.java * * Created on 2009年4月15日, 下午1:36 * * To change this template, choose To ...
- java 修改ini文件_Java读取和修改ini配置文件
/** * 修改ini配置文档中变量的值 * @param file 配置文档的路径 * @param section 要修改的变量所在段名称 * @param variable 要修改的变量名称 * ...
- Java创建SpringBoot服务时yml文件显示粉色不显示绿色小叶子
在做项目的时候遇到了一个问题:在搭建后台环境的时候创建Spring服务时yml文件显示粉色不显示绿色小叶子,而且一开始没注意,目录结构下的java目录和resources目录也不显示应有的蓝色和黄色的 ...
- java读取并修改xml文件
java读取并修改xml文件 java如何读取xml并且修改xml文件呢?代码如下: //复制模板xnl File file = new File(xmlSavePath + "/mb.xm ...
- Java修改文件夹下所有文件名
惯例: 我是温浩然: 最近,由于某些特殊情况,需要在一个文件夹下,修改所有文件的名字, 所有文件名加前缀. 代码如下: import java.io.File; public class Demo{p ...
最新文章
- springboot 中的 这种策略模式运用实战
- BUUCTF(pwn) jarvisoj_level4 栈溢出,泄露libc
- ensp支持哪个版本virtualbox_如何在 Fedora 中安装 VirtualBox
- 双栈排序java_双栈排序(Java)
- 51 java_51javacms
- 温故而知新:HttpApplication,HttpModule,HttpContext及Asp.Net页生命周期
- loadrunner参数化excel数据
- 为什么手机升级系统反应慢了_手机卡顿反应慢怎么解决?久用不卡顿的手机盘点...
- 浏览器皮肤_和平精英返场皮肤投票时间是什么时候?投票地址入口介绍-手游资讯...
- Qt4项目迁移到Qt5问题:greaterThan(QT_MAJOR_VERSION, 4): QT += widgets .
- 推荐给java新手的JAVA零基础入门书籍
- 前端中用手机拍照压缩,上传图片压缩
- centos7中安装nginx步骤详解
- 《权力的游戏》里,是谁活成了史诗?
- 2019-11-11
- c语言中用什么表示真假,C语言中如何表示“真”和“假”?系统如何判断一个量的“真”和“假”?...
- thymeleaf模板+Shiro标签对按钮权限的控制
- 买不起switch的人如何使用手机+平板玩Just Dance
- 笔记本内存和台式机内存的区别
- linux 开启终端256色支持
热门文章
- 【吾爱破解第二期】操作学习笔记
- ROS做端口映射DDNS的N个做法详细教程
- [软件工程] 可行性研究
- lodop 调用打印机打印条码
- 转android gralloc流程分析for msm8960
- 北大青鸟linux运维,北大青鸟幸福IT学院:Linux运维学习路线,实用Linux教程,推荐学习收藏...
- 2017中兴捧月算法精英挑战赛-迪杰斯特拉
- 电骡服务器搜索文件排序,电骡搜中文名资源一定要注意的技巧及其他
- 机房服务器配置方案文件,机房改造/机房搬迁实施方案及步骤
- 【PAT】A1150 Travelling Salesman Problem【中国邮递员问题】