国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

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

SpringBoot 如何讀取classpath下的文件

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

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

這時就需要通過類加載器讀取文件,類加載器可以讀取jar包中的class類當然也可以讀取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包下文件假設resources目錄下有一個test.txt文件,首先獲得當前的類加載器,通過類加載器讀取文件。// 方法1InputStream io = Thread.currentThread().getContextClassLoader().getResourceAsStream('test.txt');// 方法2InputStream io = getClass().getClassLoader().getResourceAsStream('test.txt');

注意:

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

SpringBoot項目打包成jar后獲取classpath下文件失敗

公司的一個SpringBoot項目中,有需要下載文件模板的需求,按理來說分布式項目文件都應該上傳到文件服務器,但是由于文件不是太多于是就放在了classpath下,在本地開發的時候發現都能正常下載文件,但是打包成jar上傳到Linxu測試環境上就報錯,找不到classpath路徑。

原因

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

解決方案

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

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

1. 在static下新建pattern目錄,并新建一個名為 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 響應 * @throws IOException 異常 */ public static void downFile(String fileName,HttpServletRequest request,HttpServletResponse response,InputStream in) throws IOException {//輸出流自動關閉,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. 測試 使用Maven工具把項目打成jar包

SpringBoot 如何讀取classpath下的文件

在target下生成了jar包

SpringBoot 如何讀取classpath下的文件

進入jar包所在的文件夾,按住shift并右擊,點擊在此處打開命令行窗口。輸入命令啟動項目 java -jar 打包后的文件

SpringBoot 如何讀取classpath下的文件

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

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

SpringBoot 如何讀取classpath下的文件

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

標簽: Spring
相關文章:
主站蜘蛛池模板: 成人影院vs一区二区 | 女人让男人桶的小视频 | 亚洲精品无码专区在线播放 | 丁香狠狠色婷婷久久综合 | 成人欧美视频 | 96精品免费视频大全 | 精品精品国产自在久久高清 | 悠悠影院欧美日韩国产 | 国产精品人伦久久 | 成人欧美日韩视频一区 | 日韩欧美成末人一区二区三区 | 国产在线拍揄自揄视精品不卡 | 国产精品漂亮美女在线观看 | 免费小视频在线观看 | 免费精品国产日韩热久久 | 久久国产精品久久国产精品 | 一级做a级爰片性色毛片视频 | 自拍视频第一页 | 成人伊人| 新版天堂中文资源8在线 | 国产成人高清亚洲一区91 | 一 级 黄 色 大片 | 国产精品免费观在线 | 日韩精品一区二区三区高清 | 最新国产精品亚洲二区 | 狠狠色婷婷丁香综合久久韩国 | 久久高清免费视频 | 大尺度福利视频奶水在线 | 一级一片在线播放在线观看 | 国产欧美一区二区精品性色 | 成人看片在线观看免费 | 一及黄色| 欧美日韩亚洲国产 | 国产精品高清免费网站 | 亚洲成年 | 色片在线播放 | 免费日本在线视频 | 毛片大全在线 | 国产精品久久久久免费a∨ 国产精品久久久久免费视频 | 亚洲精品色综合色在线观看 | 亚洲国语 |