ubuntu20動態修改ip,springboot中yaml的內容的讀取,修改,寫入

文章目錄

    • 前言
    • 引入包
    • yaml原始內容
    • 操作目標
    • 具體代碼
    • 執行
    • 查看結果
    • 總結:

前言

之前有個需求,動態修改ubuntu20的ip,看了下: 本質上是修改01-netcfg.yaml文件,然后執行netplan apply就可以了。
所以,需求就變成了 如何對yaml文件的內容進行讀取,修改,寫入。

引入包

其實springboot提供了2個maven的包用于解析yaml(springboot的各種配置文件都是yaml),引入:

	<!-- Jackson (用于JSON處理) --><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId></dependency><!-- SnakeYAML (用于YAML解析和生成) --><dependency><groupId>org.yaml</groupId><artifactId>snakeyaml</artifactId></dependency>

yaml原始內容

network:version: 2renderer: networkdethernets:eth0:dhcp4: falseaddresses:- 192.168.150.1/24optional: trueeth1:dhcp4: falseaddresses:- 192.168.150.1/24optional: trueenp3s0:dhcp4: trueaddresses: []dhcp-identifier: macoptional: trueenp4s0:dhcp4: trueaddresses: []dhcp-identifier: macoptional: trueenp6s0:dhcp4: trueaddresses: []dhcp-identifier: macoptional: trueenp7s0:dhcp4: trueaddresses: []dhcp-identifier: macoptional: trueenp8s0:dhcp4: falseaddresses:- 192.168.150.1/24dhcp-identifier: macoptional: true

操作目標

目前的配置文件etho網卡是動態的獲取ip,現在把配置文件ech修改如下:
固定ip:dhcp4 --》 false
添加網卡: gateway4: 172.16.10.254
設置ip地址:
設置dns,不然不能上外網
在這里插入圖片描述

具體代碼

public static void main(String[] args) {try {// Step 1: 讀取YAML文件并加載為Map, 輸入YAML文件路徑InputStream inputStream = new FileInputStream("01-netcfg.yaml");Yaml yaml = new Yaml();Map<String, Object> yamlMap = yaml.load(inputStream);// Step 2: 使用ObjectMapper將Map轉換為JSON字符串ObjectMapper om = new ObjectMapper();String jsonStr = om.writeValueAsString(yamlMap);// Step 3: 將JSON字符串解析成JsonNode,便于修改JsonNode rootNode = om.readTree(jsonStr);// Step 4: 修改eth0節點JsonNode ethernetsNode = rootNode.path("network").path("ethernets");// 獲取eth0節點并修改其值JsonNode eth0Node = ethernetsNode.path("eth0");// 創建新的eth0配置((ObjectNode) eth0Node).put("dhcp4", false);((ObjectNode) eth0Node).putArray("addresses").add("172.16.10.43/24");((ObjectNode) eth0Node).put("gateway4", "172.16.10.254");// 設置新的DNS地址作為數組JsonNode nameserversNode = eth0Node.path("nameservers");// 使用ArrayNode來生成數組格式ArrayNode arrayNode = om.createArrayNode();arrayNode.add("114.114.114.114");arrayNode.add("8.8.8.8");arrayNode.add("8.8.4.4");((ObjectNode) nameserversNode).set("addresses", arrayNode);// Step 5: 將修改后的JsonNode轉換為Map,這里就是將JsonNode轉換為MapMap<String, Object> modifiedMap = om.convertValue(rootNode, Map.class);// Step 6: 使用SnakeYAML將修改后的Map轉換為YAML格式DumperOptions options = new DumperOptions();options.setDefaultFlowStyle(DumperOptions.FlowStyle.BLOCK);Yaml yamlWriter = new Yaml(options);StringWriter stringWriter = new StringWriter();yamlWriter.dump(modifiedMap, stringWriter);// Step 7: 將新的YAML寫回文件try (BufferedWriter writer = new BufferedWriter(new FileWriter("01-netcfg.yaml"))) {writer.write(stringWriter.toString());}System.out.println("YAML updated successfully!");} catch (IOException e) {e.printStackTrace();}

執行

在這里插入圖片描述

查看結果

在這里插入圖片描述
顯示已經修改!!

總結:

文章主要介紹了如何使用Java操作YAML文件,具體實現了讀取、修改和寫入YAML文件的過程。通過引入Jackson和SnakeYAML兩個包,實現了將YAML文件內容轉換為Map,然后再將Map修改后重新轉換為YAML格式并寫回文件。

在具體操作目標上,通過代碼示例實現了將原始YAML文件中的某一節點進行修改,包括修改網絡配置,設置固定IP地址、網關、DNS等。最后展示了執行結果,并驗證配置已經修改成功。

通過本文的示例,讀者可以了解如何在Java中操作YAML文件,實現對YAML配置文件的動態修改,為實際項目中類似需求提供了解決思路和代碼實現。


本文完

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/70195.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/70195.shtml
英文地址,請注明出處:http://en.pswp.cn/web/70195.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【算法】雙指針(下)

目錄 查找總價格為目標值的兩個商品 暴力解題 雙指針解題 三數之和 雙指針解題(左右指針) 四數之和 雙指針解題 雙指針關鍵點 注意事項 查找總價格為目標值的兩個商品 題目鏈接&#xff1a;LCR 179. 查找總價格為目標值的兩個商品 - 力扣&#xff08;LeetCode&#x…

Windows 圖形顯示驅動開發-IoMmu 模型

輸入輸出內存管理單元 (IOMMU) 是一個硬件組件&#xff0c;它將支持具有 DMA 功能的 I/O 總線連接到系統內存。 它將設備可見的虛擬地址映射到物理地址&#xff0c;使其在虛擬化中很有用。 在 WDDM 2.0 IoMmu 模型中&#xff0c;每個進程都有一個虛擬地址空間&#xff0c;即&a…

軟件測評報告包括哪些內容?第三方軟件測評機構推薦

在當今信息技術飛速發展的時代&#xff0c;軟件的品質與性能直接影響到企業的運營效率和市場競爭力。為了確保軟件的可用性和可靠性&#xff0c;軟件測評成為一個不可或缺的環節&#xff0c;軟件測評報告也是對軟件產品進行全面評估后形成的一份文檔&#xff0c;旨在系統地紀錄…

深淺拷貝區別,怎么區別使用

在 JavaScript 中&#xff0c;深拷貝&#xff08;Deep Copy&#xff09; 和 淺拷貝&#xff08;Shallow Copy&#xff09; 是兩種不同的對象復制方式&#xff0c;它們的區別主要體現在對嵌套對象的處理上。以下是它們的詳細對比及使用場景&#xff1a; 1. 淺拷貝&#xff08;Sh…

tailscale + derp中繼 + 阿里云服務器 (無域名版)

使用tailscale默認的中轉節點延遲很高&#xff0c;因為服務器都在國外。 感謝大佬提供的方案&#xff1a;Tailscale 搭建derp中繼節點&#xff0c;不需要域名&#xff0c;不需要備案&#xff0c;不需要申請證書&#xff08;最新&#xff09; - yafeng - 博客園 基于這個方案&…

【異常錯誤】pycharm debug view變量的時候顯示不全,中間會以...顯示

異常問題&#xff1a; 這個是在新版的pycharm中出現的&#xff0c;出現的問題&#xff0c;點擊view后不全部顯示&#xff0c;而是以...折疊顯示 在setting中這么設置一下就好了&#xff1a; 解決辦法&#xff1a; https://youtrack.jetbrains.com/issue/PY-75568/Large-stri…

【DeepSeek系列】04 DeepSeek-R1:帶有冷啟動的強化學習

文章目錄 1、簡介2、主要改進點3、兩個重要觀點4、四階段后訓練詳細步驟4.1 冷啟動4.2 推理導向的強化學習4.3 拒絕采樣和有監督微調4.4 針對所有場景的強化學習 5、蒸餾與強化學習對比6、評估6.1 DeepSeek-R1 評估6.2 蒸餾模型評估 7、結論8、局限性與未來方向 1、簡介 DeepS…

車載音頻配置(二)

目錄 OEM 自定義的車載音頻上下文 動態音頻區配置 向前兼容性 Android 14 車載音頻配置 在 Android 14 中,AAOS 引入了 OEM 插件服務,使你可以更主動地管理由車載音頻服務監督的音頻行為。 隨著新的插件服務的引入,車載音頻配置文件中添加了以下更改: ? OEM 自定義的車…

禁止WPS強制打開PDF文件

原文網址&#xff1a;禁止WPS強制打開PDF文件_IT利刃出鞘的博客-CSDN博客 簡介 本文介紹如何避免WPS強制打開PDF文件。 方法 1.刪除注冊表里.pdf的WPS綁定 WinR&#xff0c;輸入&#xff1a;regedit&#xff0c;回車。找到&#xff1a;HKEY_CLASSES_ROOT\.pdf刪除KWPS.PDF…

深入解析NoSQL數據庫:從文檔存儲到圖數據庫的全場景實踐

title: 深入解析NoSQL數據庫:從文檔存儲到圖數據庫的全場景實踐 date: 2025/2/19 updated: 2025/2/19 author: cmdragon excerpt: 通過電商、社交網絡、物聯網等12個行業場景,結合MongoDB聚合管道、Redis Stream實時處理、Cassandra SSTable存儲引擎、Neo4j路徑遍歷算法等42…

用 Biome 替代 ESLint 和 Prettier

簡介 ESLint 和 Prettier ESLint&#xff1a;代碼質量檢查工具&#xff0c;確保代碼風格一致與無錯誤 Prettier&#xff1a;代碼格式化工具&#xff0c;自動美化代碼布局 所以&#xff1a;ESLint Prettier 能自動美化代碼、自動檢查代碼錯誤的工具 Biome Biome&#xff1a;…

6.3 DBMS的功能和特征

文章目錄 DBMS的6大功能DBMS的3個特征DBMS的分類 DBMS的6大功能 DBMS包含數據定義&#xff0c;數據庫操作&#xff08;檢索、插入、修改、刪除&#xff09;&#xff0c;數據庫運行管理&#xff08;保證多用戶環境下正常運行&#xff09;&#xff0c;數據組織、存儲、管理&…

力扣hot100——找到字符串中的所有字母異位詞

給定兩個字符串 s 和 p&#xff0c;找到 s 中所有 p 的 異位詞 的子串&#xff0c;返回這些子串的起始索引。不考慮答案輸出的順序。 解法思路&#xff1a; 1. // 判斷字符相等&#xff0c;其實就是給定一個定長的窗口去滑動查找子串&#xff0c;為了便于判斷將p 與窗口中的子…

前端插件使用xlsx-populate,花樣配置excel內容,根據坐添加標替換excel內容,修改顏色,合并單元格...。

需求要求&#xff1a;業務人員有個非常復雜得excel表格&#xff0c;各種表頭等&#xff0c;但是模板是固定得。當然也可以實現在excel上搞出各種表格&#xff0c;但是不如直接用已有模板替換其中要動態得內容方便&#xff0c;這里我們用到CSDN得 xlsx-populate 插件。 實列中我…

未來AI方向落地場景:小語言模型,super_private_agent

未來AI方向落地場景:小語言模型,super_private_agent 目錄 未來AI方向落地場景:小語言模型,super_private_agent小語言模型super - private - agent(注重隱私的智能代理)碳基生命和硅基生命交互界面面向agent的專用交互協議和數據接口從web平臺經濟到網絡平臺舉例說明社交…

Coze扣子新功能詳解

今晚(2025-01-24)扣子再次進行更新 主要更新內容&#xff1a; 搭建小程序和 H5 用戶界面時&#xff0c;支持使用音頻組件播放音頻內容 數據庫操作體驗提升 界面優化&#xff1a;對數據庫詳情界面進行了重新設計&#xff0c;并將工作流運行數據庫的測試數據位置從原工作流底…

匯能感知的光譜相機/模塊產品有哪些?

CM020A 分辨率&#xff1a;1600H1200V 光譜范圍&#xff1a;350~950nm 光譜分辨率&#xff1a;1nm 接口&#xff1a;USB2.0 幀率&#xff1a;16001200 (6幀) 輸出格式&#xff1a;Raw 8bit FOV&#xff1a;D73.5H58.8V44.1 相機尺寸&#xff1a;505055mm VM02S10 分辨率…

Ollama 本地GUI客戶端:為DeepSeek用戶量身定制的智能模型管理與交互工具

Ollama 本地GUI客戶端&#xff1a;為DeepSeek用戶量身定制的智能模型管理與交互工具 相關資源文件已經打包成EXE文件&#xff0c;可雙擊直接運行程序&#xff0c;且文章末尾已附上相關源碼&#xff0c;以供大家學習交流&#xff0c;博主主頁還有更多Python相關程序案例&#xf…

OpenMv識別色塊通過串口發給STM32

硬件連接 1、Openmv端 這里OpenMV端僅作為數據的發送端,所以只需要共地,以及OpenMV的TX(P4)與開發板的RX端連接即可。 2、STM32端 將開發板連接STM芯片RX端與轉串口TX端的跳帽取下,再將OpenMV的TX端(P4)與STM的RX連接。如果使用USB轉TTL則將TTL的RX端與STM的TX端連接…

以太網交換基礎(涵蓋二層轉發原理和MAC表的學習)

在當今的網絡世界中&#xff0c;以太網交換技術是局域網&#xff08;LAN&#xff09;的核心組成部分。無論是企業網絡、學校網絡還是家庭網絡&#xff0c;以太網交換機都扮演著至關重要的角色。本文將詳細介紹以太網交換的基礎知識&#xff0c;包括以太網協議、幀格式、MAC地址…