【SpringBoot】四種讀取 Spring Boot 項目中 jar 包中的 resources 目錄下的文件

本文摘要:四種讀取 Spring Boot 項目中 jar 包中的 resources 目錄下的文件

在這里插入圖片描述

😎 作者介紹:我是程序員洲洲,一個熱愛寫作的非著名程序員。CSDN全棧優質領域創作者、華為云博客社區云享專家、阿里云博客社區專家博主。公粽號:洲與AI。
🤓 歡迎大家關注!我將分享Web前后端開發、人工智能、機器學習、深度學習從0到1系列文章。
🌼 同時洲洲已經建立了程序員技術交流群,如果您感興趣,可以私信我加入我的社群~社群中將不定時分享各類福利
🖥 隨時歡迎您跟我溝通,一起交流,一起成長、進步!點此即可獲得聯系方式~

本文目錄

  • 前言
  • 代碼一:getResourceAsStream()方法
  • 代碼二: T.class..getResourceAsStream() 方法
  • 代碼三:ClassPathResource 方法
  • 代碼四:使用@Value注解注入
  • 總結

前言

在SpringBoot應用中,經常需要讀取打包在jar包中的資源文件,比如配置文件、模板文件等。這些資源文件通常放在src/main/resources目錄下,在打包成jar包后,它們會被存儲在jar包的根目錄下。本文將介紹4種在SpringBoot中讀取這些資源文件的方法。

部署后,項目是通過打成 jar 包運行的,里面的文件是沒有實際路徑的(只有相對于項目名的相對路徑)。
在這里插入圖片描述

代碼一:getResourceAsStream()方法

這是一個公共方法,用來讀取文件中的內容的方法,通過T.class.getClassLoader().getResourceAsStream() 方法。

比如要讀取 config 文件夾下的 test.properties 文件:

public static void printFileContent(Object obj) throws IOException {if (null == obj) {throw new RuntimeException("參數為空");}BufferedReader reader = null;// 如果是文件路徑if (obj instanceof String) {reader = new BufferedReader(new FileReader(new File((String) obj)));// 如果是文件輸入流} else if (obj instanceof InputStream) {reader = new BufferedReader(new InputStreamReader((InputStream) obj));}String line = null;while ((line = reader.readLine()) != null) {System.out.println(line);}reader.close();
}

此方法是從 classpath 路徑(即:src 或 resources 路徑下)下查找文件的,所以,路徑前不需要加 “/”。

讀取方法:

public class ResourceUtil {public void getResource(String fileName) throws IOException{InputStream in = this.getClass().getClassLoader().getResourceAsStream(fileName);printFileContent(in);}public static void main(String[] args) throws IOException {new ResourceUtil().getResource("config/test.properties");}
}

在這里插入圖片描述

代碼二: T.class…getResourceAsStream() 方法

public void getResource2(String fileName) throws IOException{InputStream in = this.getClass().getResourceAsStream("/" + fileName);printFileContent(in);
}
public static void main(String[] args) throws IOException {new ResourceUtil().getResource2("config/test.properties");
}

本方法是從 classpath 路徑(即:src 或 resources 路徑下)下查找文件的,但它的路徑前需要加 “/” ,這個是跟讀取的文件與當前.class 文件的位置有關。

可以看看編譯后的文件路徑:
在這里插入圖片描述
當前文件 ResourceUtil.class 與要加載的文件 test.properties 的位置如上: test.properties 和 ResourceUtil.class 不在同一個文件夾下,所以讀取的時候是要帶上相對路徑的,那么,這會有兩種情況:

  • 如果 test.properties 和 ResourceUtil 在同一個文件夾下,那么:this.getClass().getResourceAsStream(“test.properties”)

  • 如果 test.properties 和 ResourceUtil 不在同一個文件夾下,那么:this.getClass().getResourceAsStream(“/config/test.properties”)

代碼三:ClassPathResource 方法

public void getResource3(String fileName) throws IOException{ClassPathResource classPathResource = new ClassPathResource(fileName);printFileContent(classPathResource.getInputStream());
}
public static void main(String[] args) throws IOException {new ResourceUtil().getResource3("config/test.properties");
}

代碼四:使用@Value注解注入

SpringBoot提供了@Value注解,它可以用來注入配置文件中的值,包括從jar包中的資源文件中讀取。

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;@Component
public class ConfigPropertiesReader {@Value("${app.config.value}")private String configValue;public void printConfigValue() {System.out.println("Config Value: " + configValue);}
}

在application.properties或application.yml文件中,可以這樣指定資源文件的位置:

app.config.value=classpath:config.properties

總結

Hello,各位看官老爺們好,洲洲已經建立了CSDN技術交流群,如果你很感興趣,可以私信我加入我的社群。

📝社群中不定時會有很多活動,例如每周都會包郵免費送一些技術書籍及精美禮品、學習資料分享、大廠面經分享、技術討論、行業大佬創業雜談等等。

📝社群方向很多,相關領域有Web全棧(前后端)、人工智能、機器學習、自媒體變現、前沿科技文章分享、論文精讀等等。

📝不管你是多新手的小白,都歡迎你加入社群中討論、聊天、分享,加速助力你成為下一個技術大佬!也隨時歡迎您跟我溝通,一起交流,一起成長。變現、進步、技術、資料、項目、你想要的這里都會有

📝歡迎您加入社群~一個人可以或許可以走的很快,但一群人將走的更遠!

📝關注我的公眾號(與CSDN同ID:洲與AI)可以獲得一份Java 10萬字面試寶典及相關資料!~

📝想都是問題,做都是答案!行動起來吧!歡迎評論區or后臺與我溝通交流,也歡迎您點擊下方的鏈接直接加入到我的交流社群!~ 跳轉鏈接社區~

在這里插入圖片描述

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

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

相關文章

【操作系統】Windows平臺捕獲崩潰現場底層原理,附代碼親測MiniDumpWriteDump

MiniDumpWriteDump 是一個Windows API函數,它屬于DbgHelp.dll庫,用于生成程序崩潰時的內存轉儲文件(MiniDump)。這個函數是Windows平臺下用于捕獲程序崩潰時的內存狀態的常用方法之一。以下是MiniDumpWriteDump函數的原理和工作流…

【C++】ios::sync_with_stdio(false) 與 cin.tie(nullptr) 加速 IO

一、前言 之前寫題遇到大數據量(cin、cout 數據量級達到 1e5、1e6 ),因為考慮 IO 性能報錯 TLE,故選擇 scanf、printf 替代 cin、cout,以解決問題。一直以來沒有深入研究其中原因,只知關鍵詞——同步&…

設計模式(十三)行為型模式---命令模式

文章目錄 命令模式簡介結構UML圖具體實現UML圖代碼實現 命令模式簡介 命令模式(command pattern)也叫動作模式或者事務模式。它是將請求(命令)封裝成對象,使得可以用不同的請求對客戶端進行參數化,具體的請…

MD中 面料的物理屬性參數

該圖片是Marvelous Designer軟件中"Fabric Physical Properties"(面料物理屬性)面板的截圖,用于調整面料在彎曲、折疊時的硬度(Buckling Stiffness)。 目標部分解釋了調整Buckling Stiffness的作用:通過調整該百分比值來決定面料角落處的硬度。進入80%的Buckling St…

筆記-anaconda配置Python環境

查看環境 conda env list 創建python name環境,python版本為3.9: conda create -n name python3.9 激活: conda activate name 去掉激活: conda deactivate name 進入pandas目錄: cd D:\學習\pyton\antpy代碼\ant-learn-…

NXP RT1060學習總結 - CANFD功能

1、RT1060-CAN FD功能簡介 這里使用RT1060系列的1064芯片進行開發,測試板是官方提供的開發板;RT1060系列支持3路CAN功能,CAN1和CAN2只能最為普通的CAN外設,支持CAN2.0,而CAN3支持CAN-FD功能;CAN-FD功能這里…

【LeetCode 77. 組合】

1. 題目 2. 分析 本題有個難點在于如何保存深搜得到的結果?總結了一下,深搜處理的代碼,關于返回值有三大類。 第一類:層層傳遞,將最深層的結果傳上來;這類題有:【反轉鏈表】 第二類&#xff1…

域名/子域名接管漏洞

域名/子域名接管漏洞 1.域接管2.子域接管子域接管概述使用BBOT掃描可劫持的子域通過DNS通配符生成子域接管 3.利用子域接管4.子域名接管防御手段 1.域接管 如果您發現某個域名被某個服務使用,但公司已經失去了對其的所有權,您可以嘗試注冊它&#xff08…

默認路由,直接路由,靜態路由,動態路由

對于華為設備,如華為路由器或交換機,設置這些路由類型需要通過設備的管理界面或命令行界面進行配置。以下是一般情況下如何在華為設備上設置這些路由類型的指導: 默認路由: 使用命令行界面(CLI)&#xff0c…

QMatrix詳解

一、定義 QMatrix是Qt框架中的一個類,它表示一個2x3的變換矩陣,通常用于進行二維圖形的幾何變換。這個類允許你對圖形進行平移、縮放、旋轉和剪切等操作。 二、功能 QMatrix的主要功能是提供一個便捷的方式來對二維圖形進行線性變換。通過構建一個變換…

CS和msf的權限傳遞,利用mimikatz抓取win10明文密碼

一、Cobaltstrike的安裝 http://t.csdnimg.cn/yhZin 安裝CobaltStrike,瀏覽博主的上篇文章即可!!! 這里我在自己的本機win11上執行了Client去連接kali中的Server端,直接執行.cmd文件即可!!&…

【vscode】ctrl+shift+end選中以下所有行刪除

總結,ctrlshiftend選中以下所有行 以下由chatgpt生成 在 Visual Studio Code(VS Code)中,如果你想要選中當前光標所在的一行及之后的所有行并刪除它們,可以通過組合鍵操作來實現。這種功能在編輯大型文件時特別有用&am…

【計算機畢業設計】基于SSM++jsp的校園驛站管理系統【源碼+lw+部署文檔】

目錄 第1章 緒論 1.1 課題背景 1.2 課題意義 1.3 研究內容 第2章 開發環境與技術 2.1 MYSQL數據庫 2.2 JSP技術 2.3 SSM框架 第3章 系統分析 3.1 可行性分析 3.1.1 技術可行性 3.1.2 經濟可行性 3.1.3 操作可行性 3.2 系統流程 3.2.1 操作流程 3.2.2 登錄流程 3.2.3 刪除信息流…

node會話管理詳解(cookie、session、token)

在Node.js中,cookie、session和token都是用于會話管理的機制,但它們各自有不同的使用場景和特性。 一、cookie 命令:npm install cookie-parser -save -save 參數表示將這個模塊添加到項目的 package.json 文件的 dependencies 部分&#x…

C語言| 輸出菱形*

C語言| 輸出*三角形-CSDN博客 輸出菱形。 【分析思路】 學會輸出*的三角形之后輸出菱形就很簡單了。我們分析一下,菱形是由兩個對稱的三角形組成的,也因為是對稱的,所以輸出的菱形的行數肯定是一個奇數。 1 我們在編程的時候,要…

基于卷積-小波神經網絡的SAR圖像海冰變化檢測方法(MATLAB R2018A)

海冰是冰凍圈的重要組成部分,海冰的變化信息對航行安全和自然資源開采等非常重要,許多船舶沒有加固防冰設備,因此,必須避開所有的冰區。尤其當冰壓很高時,即使破冰船也很難在冰層中前行。為了安全航行,獲取…

leetCode.89. 格雷編碼

leetCode.89. 格雷編碼 題目思路 代碼 class Solution { public:vector<int> grayCode(int n) {vector<int> res(1,0); // n 0時&#xff0c;之后一位0while (n--) {// 想要實現對象超下來&#xff0c;就從末尾開始&#xff0c;讓vector里面 加 元素for (int i …

Stable Diffusion Webui--安裝與使用

最近進行的課程匯報&#xff0c;學習了2023年的CVPR文章《DreamBooth: Fine Tuning Text-to-Image Diffusion Models for Subject-Driven Generation》&#xff0c;因此嘗試使用了幾種方法對這篇文章的工作進行了一定的復現。本文主要介紹Stable Diffusion Web UI(webui)的安裝…

【因果推斷python】10_分組和虛擬變量回歸1

目錄 分組數據回歸 分組數據回歸 并非所有數據點都是一樣的。 如果我們再次查看我們的 ENEM 數據集&#xff0c;相比小規模學校的分數&#xff0c;我們更相信規模較大的學校的分數。 這并不是說大型學校更好或什么&#xff0c; 而只是因為它們的較大規模意味著更小的方差。 i…

bootstrap5-學習筆記1-容器+布局+按鈕+工具

參考&#xff1a; Bootstrap5 教程 | 菜鳥教程 https://www.runoob.com/bootstrap5/bootstrap5-tutorial.html Spacing Bootstrap v5 中文文檔 v5.3 | Bootstrap 中文網 https://v5.bootcss.com/docs/utilities/spacing/ 之前用bootstrap2和3比較多&#xff0c;最近用到了5&a…