久久r热视频,国产午夜精品一区二区三区视频,亚洲精品自拍偷拍,欧美日韩精品二区

您的位置:首頁技術文章
文章詳情頁

解決SpringBoot ClassPathResource的大坑(FileNotFoundException)

瀏覽:2日期:2023-03-04 11:14:39
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構建的項目時,如果使用傳統的FileInputStream讀取文件流或者ResourceUtils工具類的方式,都會失敗,下面解釋原因:

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

1. ResourceUtils工具類

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

2. FileInputStream文件流的方式讀取

解決SpringBoot ClassPathResource的大坑(FileNotFoundException)

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

3. ClassPathResource獲取文件流的方式

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

獲取文件:classPathResource .getFile();

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

二、不同web容器讀取文件的區別

有兩種常見的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();

獲取文件流

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持好吧啦網。

標簽: Spring
相關文章:
主站蜘蛛池模板: 包头市| 辽阳县| 临安市| 南汇区| 泗洪县| 封开县| 普陀区| 海口市| 喀喇| 宜川县| 蒙城县| 贡嘎县| 仪征市| 朝阳区| 奉节县| 库车县| 峡江县| 高唐县| 黄梅县| 长汀县| 封开县| 乌兰察布市| 乌兰浩特市| 苏尼特右旗| 长葛市| 扎囊县| 衡阳县| 灯塔市| 虎林市| 淄博市| 宝坻区| 吴旗县| 镇沅| 仙居县| 普兰县| 来宾市| 都兰县| 河池市| 南丰县| 延安市| 乌海市|