Springboot 生產環境下讀取Resource下的文件

Springboot 生產環境下讀取Resource下的文件

在springboot中讀物resource下的文件,ResourceUtils.getFile()是個很好用的方法,直接獲取resource下的文件,用法如下:

   File file =  ResourceUtils.getFile("classPath:static/img/logo.png");

方法很好用,但是在使用maven將項目打包爲jar運行後會發現,此方法會爆出FileNotFoundException錯誤

Caused by: java.io.FileNotFoundException: class path resource [abc.xml] cannot be resolved to 
absolute file path because it does not reside in the file system: jar:file:/D:/project/ems/ta
rget/ems-1.0.0.jar!/BOOT-INF/classes!/static/img/logo.png

原來ResourceUtils.getFile讀取的是絕對路徑,是jar包內的路徑,所以無法獲取文件。於是想到可以通過ResourceLoader來讀取文件,但是ResourceLoader讀取的文件是流,於是進一步將流轉換爲文件方便操作。

   ResourceLoader resourceLoader = new DefaultResourceLoader();
   InputStream inputStream = resourceLoader.getResource("static/img/logo.png").getInputStream();
   //通過將文件轉換爲臨時文件進行操作
   File file = File.createTempFile("logo", ".png");
   try {
        FileUtils.copyInputStreamToFile(inputStream, file);
   } finally {
   		//關閉IO
        IOUtils.closeQuietly(inputStream);
   }

至此,Springboot在生產環境中讀取文件功能實現。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章