国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-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
相關文章:
主站蜘蛛池模板: 国产自线一二三四2021 | 国产在线精品二区韩国演艺界 | 亚洲国产精品乱码在线观看97 | 精品日韩欧美一区二区三区在线播放 | 欧洲女同互慰在线视频 | 99视频在线观看视频 | 久久的精品99精品66 | 亚洲精品成人7777在线观看 | 欧美一区二区在线观看 | 成人午夜免费在线观看 | 一级黄片一级毛片 | 国产综合久久 | 日本特黄特色大片免费视频网站 | 国产情侣真实露脸在线最新 | 亚洲精品一区二区手机在线 | 久久国产情侣 | 国内精品久久久久久久星辰影视 | 日本在线资源 | 亚洲毛片免费观看 | 日本性色| 美女视频黄a | 一区二区三区国产 | 国产精品2020观看久久 | 国产在线精品观看一区 | 成人公开免费视频 | 国产亚洲精品激情一区二区三区 | 中国精品视频一区二区三区 | 岛国大片在线播放免费 | 我要看欧美精品一级毛片 | 久草视频在线免费播放 | 99国产小视频| 欧美成人国产一区二区 | 久久久高清免费视频 | 成人午夜兔费观看网站 | 精品久久久视频 | 久久精品国产亚洲网站 | 国产成人精品免费 | 在线高清免费爱做网 | 国产日韩精品一区在线观看播放 | 成人午夜在线视频 | 国产网红自拍 |