最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

解決SpringBoot ClassPathResource的大坑(FileNotFoundException)

 更新時間:2021年06月16日 12:02:24   作者:bannerXu  
這篇文章主要介紹了解決SpringBoot ClassPathResource的大坑(FileNotFoundException),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

FileNotFoundException

SpringBoot 項目將項目打包成jar包,使用ClassPathResource時使用的是絕對路徑,直接調用getFile()方法會報

FileNotFoundException

直接上代碼:

通過賦值文件為臨時文件的方式解決

val resource = ClassPathResource("my.keystore")
val temp = Files.createTempFile("my.keystore", "tmp")
Files.copy(resource.inputStream, temp, StandardCopyOption.REPLACE_EXISTING)
this.getClass().getClassLoader().getResourceAsStream("apiclient_cert.p12");

web項目下讀取classpath下的文件心得

使用SpringBoot遇到的大坑

在讀取springBoot+gradle構建的項目時,如果使用傳統(tǒng)的FileInputStream讀取文件流或者ResourceUtils工具類的方式,都會失敗,下面解釋原因:

一、讀取文件的三種方式:

1. ResourceUtils工具類

import org.springframework.util.ResourceUtils;
//使用:
File file= ResourceUtils.getFile("classpath:test.txt");

2. FileInputStream文件流的方式讀取

(該方式為按行讀取,若不是按行處理,需要像圖中將每行數據存在一個buffer中,然后轉成String處理)

3. ClassPathResource獲取文件流的方式

ClassPathResource classPathResource = new ClassPathResource("test.txt");

獲取文件:classPathResource .getFile();

獲取文件流:classPathResource .getInputStream();

二、不同web容器讀取文件的區(qū)別

有兩種常見的web容器:

1. 第一種是普通的web項目,特點是jar/war壓縮包會隨著容器的啟動解壓縮成一個文件夾,當項目訪問的時候,實際是訪問文件夾,而非jar或者war包。

該種方式下,用獲取路徑的方法:

this.getClass().getResource("/")+fileName

或者獲取流的方法:

this.getClass().getResourceAsStream(failName);

都可以成功。

2. 第二種是內嵌web容器,Spring boot就是內嵌web容器,其特點是只有一個jar文件,在容器啟動后不會解壓縮,項目實際訪問的就是jar/war包

該種方式最容易遇坑??!最大的坑就是,

this.getClass().getResource("/")+fileName

在本地windows下能完美找到路徑,可是在linux測試服務器下就失敗,所以讀取jar中的文件只能用流讀取,不能用file,即只能用方式三讀取。

所以,用spring boot搭建的工程,只能用

classPathResource .getInputStream();

獲取文件流

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • Java通過word模板實現創(chuàng)建word文檔報告

    Java通過word模板實現創(chuàng)建word文檔報告

    這篇文章主要為大家詳細介紹了Java如何通過word模板實現創(chuàng)建word文檔報告的教程,文中的示例代碼講解詳細,感興趣的小伙伴可以學習一下
    2022-09-09
  • MyBatis使用動態(tài)表或列代碼解析

    MyBatis使用動態(tài)表或列代碼解析

    這篇文章主要介紹了MyBatis使用動態(tài)表或列代碼解析,分享了相關代碼示例,小編覺得還是挺不錯的,具有一定借鑒價值,需要的朋友可以參考下
    2018-02-02
  • springboot jdbctemplate如何實現多數據源

    springboot jdbctemplate如何實現多數據源

    這篇文章主要介紹了springboot jdbctemplate如何實現多數據源問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • MyBatis主鍵自增的兩種實現方法

    MyBatis主鍵自增的兩種實現方法

    本文主要介紹了MyBatis主鍵自增的兩種實現方法,主要包括注解方式或配置文件方式來實現,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2024-01-01
  • SpringMVC集成Web與MVC執(zhí)行流程和數據響應及交互相關介紹全面總結

    SpringMVC集成Web與MVC執(zhí)行流程和數據響應及交互相關介紹全面總結

    Spring MVC 是 Spring 提供的一個基于 MVC 設計模式的輕量級 Web 開發(fā)框架,本質上相當于 Servlet,Spring MVC 角色劃分清晰,分工明細,這篇文章主要介紹了SpringMVC集成Web與MVC執(zhí)行流程和數據響應及交互
    2022-10-10
  • springboot整合prometheus實現資源監(jiān)控的詳細步驟

    springboot整合prometheus實現資源監(jiān)控的詳細步驟

    Spring Boot與Prometheus的整合可以實現對Spring Boot應用的實時監(jiān)控,有助于更好地維護應用的性能,本文給大家介紹springboot整合prometheus實現資源監(jiān)控的詳細步驟,感興趣的朋友跟隨小編一起看看吧
    2024-11-11
  • 在java中如何將inputStream對象轉換為File對象(不生成本地文件)

    在java中如何將inputStream對象轉換為File對象(不生成本地文件)

    這篇文章主要介紹了在java中如何將inputStream對象轉換為File對象(不生成本地文件),具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-03-03
  • jdk8使用stream實現兩個list集合合并成一個(對象屬性的合并)

    jdk8使用stream實現兩個list集合合并成一個(對象屬性的合并)

    本文主要介紹了jdk8使用stream實現兩個list集合合并成一個(對象屬性的合并),文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • MyBatis傳入集合 list 數組 map參數的寫法

    MyBatis傳入集合 list 數組 map參數的寫法

    這篇文章主要介紹了MyBatis傳入集合 list 數組 map參數的寫法的相關資料,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2016-06-06
  • Spring?Boot實現web.xml功能示例詳解

    Spring?Boot實現web.xml功能示例詳解

    這篇文章主要介紹了Spring?Boot實現web.xml功能,通過本文介紹我們了解到,在Spring Boot應用中,我們可以通過注解和編程兩種方式實現web.xml的功能,包括如何創(chuàng)建及注冊Servlet、Filter以及Listener等,需要的朋友可以參考下
    2023-09-09

最新評論

霍城县| 汉阴县| 昭觉县| 静海县| 平顺县| 桃江县| 石河子市| 科技| 武乡县| 涞源县| 浪卡子县| 历史| 哈密市| 新兴县| 台南市| 海城市| 永登县| 新津县| 蚌埠市| 固原市| 中西区| 临夏市| 迭部县| 蒙阴县| 子洲县| 鱼台县| 伊通| 秭归县| 石景山区| 万宁市| 霸州市| 保亭| 新宁县| 张家口市| 邓州市| 浏阳市| 尼勒克县| 务川| 微山县| 新津县| 安塞县|