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

SpringBoot讀取resource目錄下文件失敗的原因及解決方案

 更新時間:2023年08月18日 11:16:37   作者:明天再去學習  
在idea中運行時,有些resource下文件讀取工具類能夠正常獲取讀取到文件,但是通過java–jar的方式去運行jar包,此時resource下文件讀取工具類讀取文件就失效了,本文就給大家介紹一下SpringBoot讀取resource目錄下文件失敗解決方案,需要的朋友可以參考下

一、背景

最近有個需求,就是需要從resource目錄下讀取文件返回給用戶。在idea中運行時,有些resource下文件讀取工具類能夠正常獲取讀取到文件。但是通過java –jar的方式去運行jar包,此時resource下文件讀取工具類讀取文件就失效了。通過查詢搜索,了解到了是讀取的方式導致文件讀取失敗。

二、具體代碼實現

1、錯誤的resource下文件讀取寫法

這部分代碼展示的是通過運行jar包,ClassPathResource工具無法正常讀取到文件

// 讀取resource目下腳本模板文件
String templatePath = "/script/test.py";
ClassPathResource resource = new ClassPathResource(templatePath);
File file;
try {
    file = resource.getFile();
} catch (IOException e) {
    e.printStackTrace();
}

此處的主要做法是:通過ClassPathResource定位到resource目錄下的文件,再通過他去拿到File類型的文件,通過實踐證明,拿到的File是空的,說明這種方式獲取文件存在問題。

2、正確的resource下文件讀取寫法

// 讀取resource目下腳本模板文件
String templatePath = "/script/test.py";
ClassPathResource resource = new ClassPathResource(templatePath);
BufferedInputStream bis = new BufferedInputStream(resource.getInputStream());

以上的主要做法是:通過ClassPathResource定位到resource目錄下的文件,我們只需要從ClassPathResouce對象中拿到輸入流即可,通過實踐證明,通過這種方式能夠正常拿到文件輸入流。

三、問題分析

為什么在打成jar包之后,不支持文件通過File定位,只能通過流或在其他方式,抱著疑惑的態(tài)度,我進入ClassPathResource類查看是否有什么提示,結果還真找到了,看如下:

**
 * {@link Resource} implementation for class path resources. Uses either a
 * given {@link ClassLoader} or a given {@link Class} for loading resources.
 *
 * <p>Supports resolution as {@code java.io.File} if the class path
 * resource resides in the file system, but not for resources in a JAR.
 * Always supports resolution as URL.
 *
 * @author Juergen Hoeller
 * @author Sam Brannen
 * @since 28.12.2003
 * @see ClassLoader#getResourceAsStream(String)
 * @see Class#getResourceAsStream(String)
 */
public class ClassPathResource extends AbstractFileResolvingResource {

定位這一句話:

* <p>Supports resolution as {@code java.io.File} if the class path
* resource resides in the file system, but not for resources in a JAR.
* Always supports resolution as URL.

百度大致翻譯如下:

如果類路徑資源駐留在文件系統(tǒng)中,則支持解析為java.io.File,但不支持JAR中的資源。始終支持URL解析)。

所以大致可以理解為,我們通過java –jar運行的方式,是無法將resource下的文件解析為java.io.File的。所以當我們使用ClassPathResouce時,就可以從中讀取到文件流,或者轉化為URL方式進行讀取。

至于為什么不能解析為java.io.File,這個感興趣的小伙伴可以去探索一下(我大概猜測一下:jar包就是一個壓縮包,在壓縮的情況下無法解析到文件路徑,而且也無法通過File去定位到jar包中的文件)。

四、其他方式讀取resource目錄下文件

InputStream inputStream = this.getClass().getClassLoader().getResource("/script/test.py"
).openStream();
InputStream inputStream = this.getClass().getResourceAsStream("/script/test.py");
InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream("/script/test.py");

總結:可以看出,以上最終都是通過resource相關工具定位到文件后,從中拿到輸入流進行讀取的。

到此這篇關于SpringBoot讀取resource目錄下文件失敗的原因及解決方案的文章就介紹到這了,更多相關SpringBoot讀取resource文件失敗內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 一篇文章帶你搞定 springsecurity基于數據庫的認證(springsecurity整合mybatis)

    一篇文章帶你搞定 springsecurity基于數據庫的認證(springsecurity整合mybatis)

    這篇文章主要介紹了一篇文章帶你搞定 springsecurity基于數據庫的認證(springsecurity整合mybatis),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-10-10
  • 解析Java異常的棧軌跡及其相關方法

    解析Java異常的棧軌跡及其相關方法

    這篇文章主要介紹了解析Java異常的棧軌跡及其相關方法,包括棧軌跡的打印和fillInStackTrace方法等,需要的朋友可以參考下
    2015-11-11
  • Java Swing組件JFileChooser用法實例分析

    Java Swing組件JFileChooser用法實例分析

    這篇文章主要介紹了Java Swing組件JFileChooser用法,結合實例形式分析了java Swing組件JFileChooser文件選擇器的功能、使用方法及相關注意事項,需要的朋友可以參考下
    2017-11-11
  • Java?ArrayList實現班級信息管理系統(tǒng)

    Java?ArrayList實現班級信息管理系統(tǒng)

    這篇文章主要為大家詳細介紹了Java?ArrayList實現班級信息管理系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • Spring Boot 自動配置原理實現機制深度解析(實戰(zhàn)示例)

    Spring Boot 自動配置原理實現機制深度解析(實戰(zhàn)示例)

    這篇文章主要介紹了Spring Boot自動配置原理實現機制,本文深入剖析 Spring Boot 自動配置的實現原理,從核心注解到完整流程,包含詳細源碼分析和實戰(zhàn)示例,需要的朋友可以參考下
    2025-10-10
  • Java修改圖片大小尺寸的簡單實現

    Java修改圖片大小尺寸的簡單實現

    這篇文章主要介紹了Java修改圖片大小尺寸的簡單實現方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • netty中pipeline的handler添加刪除分析

    netty中pipeline的handler添加刪除分析

    這篇文章主要為大家介紹了netty中pipeline的handler添加刪除分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-04-04
  • Java 類與對象重難點詳解

    Java 類與對象重難點詳解

    類(class)和對象(object)是兩種以計算機為載體的計算機語言的合稱。對象是對客觀事物的抽象,類是對對象的抽象。類是一種抽象的數據類型
    2021-11-11
  • java的依賴倒置原則你了解多少

    java的依賴倒置原則你了解多少

    這篇文章主要為大家詳細介紹了java的依賴倒置原則,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-02-02
  • Java中equals()方法重寫實現代碼

    Java中equals()方法重寫實現代碼

    這篇文章主要介紹了Java中equals()方法重寫實現代碼的相關資料,需要的朋友可以參考下
    2017-05-05

最新評論

枣庄市| 大竹县| 巧家县| 双辽市| 随州市| 岚皋县| 新民市| 阜阳市| 南昌市| 南川市| 通渭县| 奇台县| 油尖旺区| 开化县| 光泽县| 阳新县| 凌云县| 高碑店市| 高清| 黔西| 泾川县| 织金县| 平昌县| 连州市| 周宁县| 乌拉特中旗| 汪清县| 甘德县| 荔波县| 团风县| 南汇区| 西乌珠穆沁旗| 屏南县| 巩留县| 固始县| 黑河市| 囊谦县| 新郑市| 利辛县| 措勤县| 信丰县|