91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

SpringBoot怎么讀取classpath下的文件

發布時間:2021-06-16 13:46:20 來源:億速云 閱讀:882 作者:小新 欄目:開發技術

這篇文章主要介紹了SpringBoot怎么讀取classpath下的文件,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

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文件,首先獲得當前的類加載器,通過類加載器讀取文件。
// 方法1
InputStream io = Thread.currentThread().getContextClassLoader().getResourceAsStream("test.txt");
// 方法2
InputStream 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("\\static\\pattern\\test.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;
@RestController
public class DownloadController {
    @GetMapping("/download/pattern")
    public void downloadPattern(HttpServletRequest request, HttpServletResponse response){
        System.out.println("開始下載文件.....");
        ClassPathResource resource = new ClassPathResource("\\static\\pattern\\test.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下的文件

感謝你能夠認真閱讀完這篇文章,希望小編分享的“SpringBoot怎么讀取classpath下的文件”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,更多相關知識等著你來學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

琼中| 九寨沟县| 沙雅县| 友谊县| 洪江市| 措美县| 都兰县| 辽中县| 隆林| 三都| 孝昌县| 合肥市| 彩票| 四会市| 宁阳县| 若羌县| 九江市| 德保县| 毕节市| 广平县| 阜宁县| 常宁市| 广元市| 革吉县| 祥云县| 商南县| 石棉县| 治多县| 福泉市| 新乡市| 蓬莱市| 汉川市| 扎赉特旗| 镶黄旗| 乌兰县| 定结县| 姜堰市| 乐亭县| 江城| 贵溪市| 桂阳县|