yaml文件转properties和properties转yaml
- 首先要引入依赖
<dependency> <groupId>com.fasterxml.jackson.dataformat</groupId> <artifactId>jackson-dataformat-yaml</artifactId> <version>2.9.4</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.dataformat</groupId> <artifactId>jackson-dataformat-properties</artifactId> <version>2.9.4</version> </dependency>
2.直接上工具类
package config.center.config.utils; import com.fasterxml.jackson.core.JsonParser; import com.fasterxml.jackson.core.JsonToken; import com.fasterxml.jackson.dataformat.javaprop.JavaPropsFactory; import com.fasterxml.jackson.dataformat.yaml.YAMLFactory; import com.fasterxml.jackson.dataformat.yaml.YAMLGenerator; import com.fasterxml.jackson.dataformat.yaml.YAMLParser; import java.io.*; import java.nio.charset.Charset; import java.util.LinkedList; import java.util.List; /** * @program: config * @description: 转换工具类 * @author: xujingyang * @create: 2019-03-27 12:16 **/ public class TransferUtils { private static final String ENCODING = "utf-8"; public static void yml2Properties(String path) { final String DOT = "."; List<String> lines = new LinkedList<>(); try { YAMLFactory yamlFactory = new YAMLFactory(); YAMLParser parser = yamlFactory.createParser( new InputStreamReader(new FileInputStream(path), Charset.forName(ENCODING))); String key = ""; String value = null; JsonToken token = parser.nextToken(); while (token != null) { if (JsonToken.START_OBJECT.equals(token)) { // do nothing } else if (JsonToken.FIELD_NAME.equals(token)) { if (key.length() > 0) { key = key + DOT; } key = key + parser.getCurrentName(); token = parser.nextToken(); if (JsonToken.START_OBJECT.equals(token)) { continue; } value = parser.getText(); lines.add(key + "=" + value); int dotOffset = key.lastIndexOf(DOT); if (dotOffset > 0) { key = key.substring(0, dotOffset); } value = null; } else if (JsonToken.END_OBJECT.equals(token)) { int dotOffset = key.lastIndexOf(DOT); if (dotOffset > 0) { key = key.substring(0, dotOffset); } else { key = ""; lines.add(""); } } token = parser.nextToken(); } parser.close(); System.out.println(lines); } catch (Exception e) { throw new RuntimeException(e); } } public static void properties2Yaml(String path) { JsonParser parser = null; JavaPropsFactory factory = new JavaPropsFactory(); try { parser = factory.createParser( new InputStreamReader(new FileInputStream(path), Charset.forName(ENCODING))); } catch (IOException e) { throw new RuntimeException(e); } try { YAMLFactory yamlFactory = new YAMLFactory(); YAMLGenerator generator = yamlFactory.createGenerator( new OutputStreamWriter(new FileOutputStream(path), Charset.forName(ENCODING))); JsonToken token = parser.nextToken(); while (token != null) { if (JsonToken.START_OBJECT.equals(token)) { generator.writeStartObject(); } else if (JsonToken.FIELD_NAME.equals(token)) { generator.writeFieldName(parser.getCurrentName()); } else if (JsonToken.VALUE_STRING.equals(token)) { generator.writeString(parser.getText()); } else if (JsonToken.END_OBJECT.equals(token)) { generator.writeEndObject(); } token = parser.nextToken(); } parser.close(); generator.flush(); generator.close(); } catch (Exception e) { throw new RuntimeException(e); } } }
转换起来还是很方便的~
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构