亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁技術(shù)文章
文章詳情頁

SpringBoot 如何讀取classpath下的文件

瀏覽:2日期:2023-03-04 13:50:21
SpringBoot 讀取classpath下文件

開發(fā)過程中,必不可少的需要讀取文件,對(duì)于打包方式的不同,還會(huì)存在一些坑,比如以jar包方式部署時(shí),文件都存在于jar包中,某些讀取方式在開發(fā)工程中都可行,但是打包后,由于文件被保存在jar中,會(huì)導(dǎo)致讀取失敗。

這時(shí)就需要通過類加載器讀取文件,類加載器可以讀取jar包中的class類當(dāng)然也可以讀取jar包中的文件。

// 方法1:獲取文件或流this.getClass().getResource('/')+fileName;this.getClass().getResourceAsStream(failName);// 方法2:獲取文件File file = org.springframework.util.ResourceUtils.getFile('classpath:test.txt');// 方法3:獲取文件或流ClassPathResource classPathResource = new ClassPathResource('test.txt');classPathResource .getFile();classPathResource .getInputStream();// >>>>>>>>>>>>>>>> 下面方法可以讀取jar包下文件假設(shè)resources目錄下有一個(gè)test.txt文件,首先獲得當(dāng)前的類加載器,通過類加載器讀取文件。// 方法1InputStream io = Thread.currentThread().getContextClassLoader().getResourceAsStream('test.txt');// 方法2InputStream io = getClass().getClassLoader().getResourceAsStream('test.txt');

注意:

Spring工具類會(huì)對(duì)classpath路徑做處理,類加載器不會(huì)對(duì)classpath做處理,因此使用類加載器讀取文件,路徑中不要添加classpath

SpringBoot項(xiàng)目打包成jar后獲取classpath下文件失敗

公司的一個(gè)SpringBoot項(xiàng)目中,有需要下載文件模板的需求,按理來說分布式項(xiàng)目文件都應(yīng)該上傳到文件服務(wù)器,但是由于文件不是太多于是就放在了classpath下,在本地開發(fā)的時(shí)候發(fā)現(xiàn)都能正常下載文件,但是打包成jar上傳到Linxu測(cè)試環(huán)境上就報(bào)錯(cuò),找不到classpath路徑。

原因

原因是項(xiàng)目打包后Spring試圖訪問文件系統(tǒng)路徑,但無法訪問JAR包中的路徑。我們使用ResourceUtils.getFile('classpath:');這樣的方式是獲取不到路徑的。

解決方案

我們雖然不能直接獲取文件資源路徑,但是我們可以通過流的方式讀取資源,拿到輸入流過后我們就可以對(duì)其做操作了。關(guān)鍵代碼如下:

ClassPathResource resource = new ClassPathResource('staticpatterntest.txt'); // static/pattern下的 test.txt文件InputStream in = resource.getInputStream(); //獲取文件輸入流示例Demo

1. 在static下新建pattern目錄,并新建一個(gè)名為 test.txt的文件

SpringBoot 如何讀取classpath下的文件

2. 新建DownloadController.java

代碼如下:

package com.example.jekins.controller;import org.springframework.core.io.ClassPathResource;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.RestController;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.net.URLEncoder;@RestControllerpublic class DownloadController { @GetMapping('/download/pattern') public void downloadPattern(HttpServletRequest request, HttpServletResponse response){System.out.println('開始下載文件.....');ClassPathResource resource = new ClassPathResource('staticpatterntest.txt');try {//獲取文件輸入流 InputStream in = resource.getInputStream(); //下載文件 downFile('test文件.txt',request,response,in);} catch (IOException e) { e.printStackTrace();} } /** * 下載文件 * @param fileName 下載文件名稱 * @param response 響應(yīng) * @throws IOException 異常 */ public static void downFile(String fileName,HttpServletRequest request,HttpServletResponse response,InputStream in) throws IOException {//輸出流自動(dòng)關(guān)閉,java1.7新特性try(OutputStream os = response.getOutputStream()) { fileName = URLEncoder.encode(fileName, 'UTF-8'); response.reset(); response.setHeader('Content-Disposition', 'attachment; filename=' + fileName); response.setContentType('application/octet-stream; charset=UTF-8'); byte[] b = new byte[in.available()]; in.read(b); os.write(b); os.flush();} catch (Exception e) { System.out.println('fileName=' + fileName); e.printStackTrace();} finally { if (in != null) {in.close(); }} }}

3. 測(cè)試 使用Maven工具把項(xiàng)目打成jar包

SpringBoot 如何讀取classpath下的文件

在target下生成了jar包

SpringBoot 如何讀取classpath下的文件

進(jìn)入jar包所在的文件夾,按住shift并右擊,點(diǎn)擊在此處打開命令行窗口。輸入命令啟動(dòng)項(xiàng)目 java -jar 打包后的文件

SpringBoot 如何讀取classpath下的文件

我設(shè)置的端口是8086,瀏覽器地址欄輸入http://127.0.0.1:8086/download/pattern

此時(shí)我們可以卡看到test.txt文件下載成功

SpringBoot 如何讀取classpath下的文件

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持好吧啦網(wǎng)。

標(biāo)簽: Spring
相關(guān)文章:
主站蜘蛛池模板: 亚洲日本人成网站在线观看 | 亚洲无线乱码高清在线观看一区 | 欧美成人免费mv在线播放 | 国产综合第一页在线视频 | 国产亚洲亚洲精品777 | 欧美日韩国产不卡在线观看 | 毛片久久久 | 亚洲天堂美女视频 | 国产高清视频在线播放www色 | 亚洲欧美综合久久 | 91国内视频| 日韩不卡一级毛片免费 | 国产毛片久久国产 | 国产亚洲精品不卡在线 | 成人免费在线视频观看 | 久久九九免费 | 国内精品久久久久久久久久久久 | 免费a级毛片在线观看 | 亚洲综合一区二区 | 五月天久久久 | 久久不卡免费视频 | 日韩一区国产一级 | 成人国产mv免费视频 | 男人午夜网站 | 日韩在线观看高清 | 亚洲欧美日韩精品在线 | 国产黄a三级三级看三级 | 色综合久久久久久久 | 午夜窝窝 | 911香蕉视频 | 国产亚洲精品综合在线网址 | 伊人久久精品亚洲精品一区 | 免费a在线 | 国产亚洲精品久久午夜 | 日韩中文字幕在线免费观看 | 国产男女性做爽歪歪爱视频 | 一区二区三区无码高清视频 | 可以看黄色的网址 | 综合久久婷婷 | 久久九色综合九色99伊人 | 国产精品成人在线播放 |