Java獲取/resources目錄下的資源文件方法

来源:https://www.cnblogs.com/wyj-java/archive/2022/10/31/16844028.html
-Advertisement-
Play Games

Web項目開發中,經常會有一些靜態資源,被放置在resources目錄下,隨項目打包在一起,代碼中要使用的時候,通過文件讀取的方式,載入並使用; 今天總結整理了九種方式獲取resources目錄下文件的方法。 其中公用的列印文件方法如下: 查看代碼 /** * 根據文件路徑讀取文件內容 * * @p ...


Web項目開發中,經常會有一些靜態資源,被放置在resources目錄下,隨項目打包在一起,代碼中要使用的時候,通過文件讀取的方式,載入並使用;

今天總結整理了九種方式獲取resources目錄下文件的方法。

其中公用的列印文件方法如下:

查看代碼
    /**
     * 根據文件路徑讀取文件內容
     *
     * @param fileInPath
     * @throws IOException
     */
    public static void getFileContent(Object fileInPath) throws IOException {
        BufferedReader br = null;
        if (fileInPath == null) {
            return;
        }
        if (fileInPath instanceof String) {
            br = new BufferedReader(new FileReader(new File((String) fileInPath)));
        } else if (fileInPath instanceof InputStream) {
            br = new BufferedReader(new InputStreamReader((InputStream) fileInPath));
        }
        String line;
        while ((line = br.readLine()) != null) {
            System.out.println(line);
        }
        br.close();
    }

1、方法一 :

主要核心方法是使用getResourcegetPath方法,這裡的getResource("")裡面是空字元串

查看代碼
     public void function1(String fileName) throws IOException {
        String path = this.getClass().getClassLoader().getResource("").getPath();//註意getResource("")裡面是空字元串
        System.out.println(path);
        String filePath = path + fileName;
        System.out.println(filePath);
        getFileContent(filePath);
    }

2、方法二:

主要核心方法是使用getResourcegetPath方法,直接通過getResource(fileName)方法獲取文件路徑,註意如果是路徑中帶有中文一定要使用URLDecoder.decode解碼。

查看代碼
     /**
     * 直接通過文件名getPath來獲取路徑
     *
     * @param fileName
     * @throws IOException
     */
    public void function2(String fileName) throws IOException {
        String path = this.getClass().getClassLoader().getResource(fileName).getPath();//註意getResource("")裡面是空字元串
        System.out.println(path);
        String filePath = URLDecoder.decode(path, "UTF-8");//如果路徑中帶有中文會被URLEncoder,因此這裡需要解碼
        System.out.println(filePath);
        getFileContent(filePath);
    }

3、方法三:

直接通過文件名+getFile()來獲取文件。如果是文件路徑的話getFilegetPath效果是一樣的,如果是URL路徑的話getPath是帶有參數的路徑。如下所示:

url.getFile()=/admin/java/people.txt?id=5
url.getPath()=/admin/java/people.txt

使用getFile()方式獲取文件的代碼如下:

查看代碼
     /**
     * 直接通過文件名+getFile()來獲取
     *
     * @param fileName
     * @throws IOException
     */
    public void function3(String fileName) throws IOException {
        String path = this.getClass().getClassLoader().getResource(fileName).getFile();//註意getResource("")裡面是空字元串
        System.out.println(path);
        String filePath = URLDecoder.decode(path, "UTF-8");//如果路徑中帶有中文會被URLEncoder,因此這裡需要解碼
        System.out.println(filePath);
        getFileContent(filePath);
    }

4、方法四(★重要):

直接使用getResourceAsStream方法獲取流,上面的幾種方式都需要獲取文件路徑,但是在SpringBoot中所有文件都在jar包中,沒有一個實際的路徑,因此可以使用以下方式。

查看代碼
     /**
     * 直接通過文件名+getFile()來獲取
     *
     * @param fileName
     * @throws IOException
     */
    public void function4(String fileName) throws IOException {
        String path = this.getClass().getClassLoader().getResource(fileName).getFile();//註意getResource("")裡面是空字元串
        System.out.println(path);
        String filePath = URLDecoder.decode(path, "UTF-8");//如果路徑中帶有中文會被URLEncoder,因此這裡需要解碼
        System.out.println(filePath);
        getFileContent(filePath);
    }

5、方法五(★重要):

主要也是使用getResourceAsStream方法獲取流,不使用getClassLoader可以使用getResourceAsStream("/people.txt")直接從resources根路徑下獲取,SpringBoot中所有文件都在jar包中,沒有一個實際的路徑,因此可以使用以下方式。

查看代碼
     /**
     * 直接使用getResourceAsStream方法獲取流
     * 如果不使用getClassLoader,可以使用getResourceAsStream("/people.txt")直接從resources根路徑下獲取
     *
     * @param fileName
     * @throws IOException
     */
    public void function5(String fileName) throws IOException {
        InputStream in = this.getClass().getResourceAsStream("/" + fileName);
        getFileContent(in);
    }

6、方法六(★重要):

通過ClassPathResource類獲取文件流,SpringBoot中所有文件都在jar包中,沒有一個實際的路徑,因此可以使用以下方式。

查看代碼
     /**
     * 通過ClassPathResource類獲取,建議SpringBoot中使用
     * springboot項目中需要使用此種方法,因為jar包中沒有一個實際的路徑存放文件
     *
     * @param fileName
     * @throws IOException
     */
    public void function6(String fileName) throws IOException {
        ClassPathResource classPathResource = new ClassPathResource(fileName);
        InputStream inputStream = classPathResource.getInputStream();
        getFileContent(inputStream);
    }

7、方法七:

通過絕對路徑獲取項目中文件的位置,只是本地絕對路徑,不能用於伺服器獲取。

查看代碼
/**
     * 通過絕對路徑獲取項目中文件的位置(不能用於伺服器)
     * @param fileName
     * @throws IOException
     */
    public void function7(String fileName) throws IOException {
        String rootPath = System.getProperty("user.dir");//D:\\java\\git\\springBoot-test
        String filePath = rootPath + "\\springmvc-test\\src\\main\\resources\\" + fileName;
        getFileContent(filePath);
    }

8、方法八:

通過new File("")獲取當前的絕對路徑,只是本地絕對路徑,不能用於伺服器獲取。

查看代碼
     /**
     * 通過絕對路徑獲取項目中文件的位置(不能用於伺服器)
     * @param fileName
     * @throws IOException
     */
    public void function8(String fileName) throws IOException {
        //參數為空
        File directory = new File("");
        //規範路徑:getCanonicalPath() 方法返回絕對路徑,會把 ..\ 、.\ 這樣的符號解析掉
        String rootCanonicalPath = directory.getCanonicalPath();
        //絕對路徑:getAbsolutePath() 方法返迴文件的絕對路徑,如果構造的時候是全路徑就直接返回全路徑,如果構造時是相對路徑,就返回當前目錄的路徑 + 構造 File 對象時的路徑
        String rootAbsolutePath =directory.getAbsolutePath();
        System.out.println(rootCanonicalPath);
        System.out.println(rootAbsolutePath);
        String filePath = rootCanonicalPath + "\\java\\src\\main\\resources\\"+fileName;
        getFileContent(filePath);
    }
 

9、方法九:

主要是通過設置環境變數,將文件放在環境變數中,原理也是通過絕對路徑獲取。

示例中我設置了一個環境變數:TEST_ROOT = D:\\java\\git\\springBoot-test

 System.getenv("TEST_ROOT");
 System.getProperty("TEST_ROOT")

通過設置環境變數的方式,然後通過絕對路徑獲取文件

查看代碼
/**
     * 通過絕對路徑獲取項目中文件的位置
     *
     * @param fileName
     * @throws IOException
     */
    public void function9(String fileName) throws IOException {
        System.setProperty("TEST_ROOT","D:\\java\\git\\springBoot-test");
        //參數為空
        String rootPath = System.getProperty("TEST_ROOT");
        System.out.println(rootPath);
        String filePath = rootPath + "\\springmvc-test\\src\\main\\resources\\" + fileName;
        getFileContent(filePath);
    }

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • phpt測試文件說明 phpt文件用於PHP的自動化測試,這是PHP用自己來測試自己的測試數據用例文件。 測試腳本通過執行PHP源碼根目錄下的run-tests.php,讀取phpt文件執行測試。 phpt文件包含 TEST,FILE,EXPECT 等多個段落的文件。在各個段落中,TEST、FILE ...
  • 2022-10-23 步驟: 一、創建工程倉庫 (1)在“碼雲”上創建一個倉庫,在本地盤符中創建一個文件夾,右擊,使用git,將遠程倉庫的內容克隆到本地倉庫中,點擊“Git Bash Here”。將剛剛創建的遠程倉庫克隆,使用的命令是“git clone 剛剛遠程倉庫的地址(點擊(克隆/下載)按鈕會 ...
  • git介紹 什麼是git git是一種版本控制器 - 控制的對象是開發的項目代碼 什麼是版本控制器 完成 協同開發 項目,幫助程式員整合代碼 i)幫助開發者合併開發的代碼 ii)如果出現衝突代碼的合併,會提示後提交合併代碼的開發者,讓其解決衝突 軟體:SVN 、 GIT(都是同一個人的個人項目) g ...
  • 數據結構基礎—數組和廣義表 一、數組 1.數據的定義 數組類似於線性表,就是多維結構的順序表, 2.稀疏數組 a.稀疏數組的定義: 假設m行n列的矩陣中含有t個非零元素若t/(m*n) <= 0.05,則稱該矩陣為稀疏矩陣 稀疏矩陣也分為特殊矩陣和隨機矩陣隨機 特殊矩陣:三角,對角... 隨機矩陣: ...
  • 簡介: 策略模式又叫做政策模式,用於如何組織和調用演算法的,是屬於行為型模式的一種。 策略模式需要三個角色構成: Context 封裝角色:也叫做上下文角色,起承上啟下封裝作用,屏蔽高層模塊對策略、演算法的直接訪問,封裝可能存在的變化。 Strategy 抽象策略角色:通常為介面,指定規則。 Concr ...
  • 內核中的`InlineHook`函數掛鉤技術其實與應用層完全一致,都是使用劫持執行流並跳轉到我們自己的函數上來做處理,唯一的不同只有一個內核`Hook`只針對內核API函數,雖然只針對內核API函數實現掛鉤但由於其身處在最底層所以一旦被掛鉤其整個應用層都將會受到影響,這就直接決定了在內核層掛鉤的效果... ...
  • 作者:農民工老王 來源:blog.csdn.net/monarch91/article/details/122709576 我是一個非科班出身的程式員,大學本科時的專業和編程無關,畢業後做了幾年事業單位後,才中途轉行做了軟體開發。 我一入行就聽說了35歲危機:程式員到了35歲後,如果沒有進入管理層, ...
  • python爬蟲基本概述 一、爬蟲是什麼 網路爬蟲(Crawler)又稱網路蜘蛛,或者網路機器人(Robots). 它是一種按照一定的規則, 自動地抓取萬維網信息的程式或者腳本。換句話來說,它可以根據網頁的鏈接地址自動獲取網頁 內容。如果把互聯網比做一個大蜘蛛網,它裡面有許許多多的網頁,網路蜘蛛可以 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...