国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Spring?Boot讀取resource目錄下文件失敗解決方案及分析

這篇具有很好參考價(jià)值的文章主要介紹了Spring?Boot讀取resource目錄下文件失敗解決方案及分析。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

一、背景

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

二、具體代碼實(shí)現(xiàn)

1、錯(cuò)誤的resource下文件讀取寫法

這部分代碼展示的是通過運(yùn)行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類型的文件,通過實(shí)踐證明,拿到的File是空的,說明這種方式獲取文件存在問題。

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

// 讀取resource目下腳本模板文件
String templatePath = "/script/test.py";

ClassPathResource resource = new ClassPathResource(templatePath);
BufferedInputStream bis = new BufferedInputStream(resource.getInputStream());

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

三、問題分析

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

**
 * {@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運(yùn)行的方式,是無法將resource下的文件解析為java.io.File的。所以當(dāng)我們使用ClassPathResouce時(shí),就可以從中讀取到文件流,或者轉(zhuǎn)化為URL方式進(jìn)行讀取。

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

四、其他方式讀取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");
InputStream?inputStream = ResourceUtils.getURL("classpath:script/test.py").openStream();

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

好了,以上就是讀取jar包中resouce目錄下文件的解決方式了,還有更多其他的讀取方式,歡迎小伙伴們?cè)u(píng)論區(qū)留言討論。文章來源地址http://www.zghlxwxcb.cn/news/detail-450631.html

到了這里,關(guān)于Spring?Boot讀取resource目錄下文件失敗解決方案及分析的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 解決Springboot項(xiàng)目打成jar包后獲取resources目錄下的文件失敗的問題

    解決Springboot項(xiàng)目打成jar包后獲取resources目錄下的文件失敗的問題

    前幾天在項(xiàng)目讀取resources目錄下的文件時(shí)碰到一個(gè)小坑,明明在本地是可以正常運(yùn)行的,但是一發(fā)到測(cè)試環(huán)境就報(bào)錯(cuò)了,說找不到文件,報(bào)錯(cuò)信息是:class path resource [xxxx] cannot be resolved to absolute file path because it does not reside in the file system: jar:file:xxxx.jar!/BOOT-INF/classes!xxxx。 看了

    2024年02月11日
    瀏覽(29)
  • maven打包spring boot jar沒有 BOOT-INF目錄解決方案

    ##查看項(xiàng)目里面是否有引入spring-boot-maven-plugin plugin ? ? ? ? ? groupIdorg.springframework.boot/groupId ? ? ? ? ? artifactIdspring-boot-maven-plugin/artifactId ? ? ? ? /plugin ##如果有引入,還不行 ##查看pom.xml是否有pluginManagement標(biāo)簽,去掉pluginManagement就行了 ##去掉pluginManagement標(biāo)簽

    2024年01月18日
    瀏覽(24)
  • spring boot 下載resources下的靜態(tài)文件為流格式

    廢話不多說,直接上代碼 一、下載邏輯 二、格式對(duì)照表 比較全面的contentType的類型值

    2024年02月07日
    瀏覽(16)
  • Spring Boot讀取配置文件

    Spring Boot 是一種用于快速構(gòu)建基于Spring的應(yīng)用程序的框架,它提供了很多便利的功能和約定,使開發(fā)者可以快速搭建、配置和部署應(yīng)用程序。在Spring Boot中,讀取配置文件是一個(gè)非常常見的任務(wù),本文將介紹如何在Spring Boot應(yīng)用程序中讀取配置文件,并使用讀取到的配置信息。

    2024年02月07日
    瀏覽(20)
  • Java spring-boot項(xiàng)目中如何上傳下載文件或圖片到spring-boot規(guī)定的非靜態(tài)目錄

    spring-boot的項(xiàng)目,雖然它自己定義了一個(gè)靜態(tài)文件的存儲(chǔ)目錄,但是這個(gè)目錄一般是作為前端靜態(tài)文件的目錄來作為使用的。如果使用這個(gè)靜態(tài)目錄來作為我們上傳文件的目錄會(huì)有一個(gè)比較尷尬的地方:將spring-boot打包成為jar包后,隨著上傳圖片的增多,這個(gè)jar包也會(huì)跟著變大

    2024年02月16日
    瀏覽(20)
  • centos下安裝ftp-讀取目錄列表失敗-

    centos下安裝ftp-讀取目錄列表失敗-

    默認(rèn)路徑:? ?/var/ftp/pub anonymous : Filezilla 傳輸設(shè)置要選“主動(dòng)”,否則會(huì)出現(xiàn) 狀態(tài): 讀取目錄列表… 命令: PWD 響應(yīng): 257 “/” is your current location 命令: TYPE I 響應(yīng): 200 TYPE is now 8-bit binary 命令: PASV 響應(yīng): 227 Entering Passive Mode (140,143,228,107,154,6) 命令: MLSD 錯(cuò)誤: 20 秒后無活動(dòng),連接

    2024年02月15日
    瀏覽(20)
  • ftp連接成功, 讀取目錄列表失敗, 是什么原因?

    ftp連接成功, 讀取目錄列表失敗, 是什么原因?

    在linux云服務(wù)器搭建FTP服務(wù)器,直接使用寶塔面板簡(jiǎn)單粗暴,安全組記得放行(FTP:21端口,8888端口由寶塔web訪問界面) 用filezilla、FTP Rush、 xftp等軟件連接阿里云的虛擬主機(jī)服務(wù)器的FTP的時(shí)候,一直出現(xiàn)這個(gè)錯(cuò)誤,讀取目錄列表失敗,或者無法顯示遠(yuǎn)程目錄。 網(wǎng)上一堆抄來抄去

    2024年02月15日
    瀏覽(22)
  • Java讀取resources下的文件及資源路徑

    在Java開發(fā)中,經(jīng)常需要讀取項(xiàng)目中resources目錄下的文件或獲取資源路徑。本文將介紹如何在Java中讀取resources下的文件,并提供相關(guān)實(shí)例來說明。 方式一:使用ClassLoader 上述代碼通過ClassLoader的 getResourceAsStream 方法獲取resources目錄下的 test.txt 文件的輸入流,然后通過BufferedR

    2024年02月15日
    瀏覽(18)
  • FileZilla僅開放21端口導(dǎo)致連接超時(shí)錯(cuò)誤:讀取目錄列表失敗

    FileZilla僅開放21端口導(dǎo)致連接超時(shí)錯(cuò)誤:讀取目錄列表失敗

    條件: ? ? ? ? 部署FileZilla Server后,在防火墻內(nèi)打開21端口入站。 ? ? ? ? 另一臺(tái)機(jī)器使用FileZilla連接服務(wù)器,卡在如下: ????????????????狀態(tài):?? ?連接建立,等待歡迎消息... ????????????????狀態(tài):?? ?初始化 TLS 中... ????????????????狀態(tài):?? ?

    2024年02月05日
    瀏覽(19)
  • Unity中讀取Json文件:基于Assets/Resources文件夾

    我好生氣??,Python,JS里面一兩行代碼能夠搞定的Json讀取,在Unity中使用C#讀取Json文件超多坑,爬出來一個(gè)又來一個(gè)。 主要是JsonUtility.FromJson太不給力了。 最好的方式是,使用 https://github.com/jilleJr/Newtonsoft.Json-for-Unity 這個(gè)第三方庫。詳情見下。 Step 1: 先把對(duì)應(yīng)的Json File放到

    2024年02月12日
    瀏覽(23)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包