SpringBoot classpath下讀取Resource下文件


模板文件放在resource目錄下

<resources>  
            <resource>  
                <filtering>true</filtering>  
                <directory>src/resources</directory>  
                <includes>  
                    <include>*.*</include>  
                </includes>  
            </resource>  
        </resources>
</resources>

確保資源文件加載,地址為相對路徑。編譯后resource與java代碼在同級目錄class下。

第一種:

ClassPathResource classPathResource = new ClassPathResource("excleTemplate/test.xlsx");
InputStream inputStream =classPathResource.getInputStream();

第二種:

InputStream inputStream = Thread.currentThread().getContextClassLoader().getResourceAsStream("excleTemplate/test.xlsx");

第三種:

InputStream inputStream = this.getClass().getResourceAsStream("/excleTemplate/test.xlsx");

第四種:

File file = ResourceUtils.getFile("classpath:excleTemplate/test.xlsx");
InputStream inputStream = new FileInputStream(file);

經測試:
前三種方法在開發環境(IDE中)和生產環境(linux部署成jar包)都可以讀取到,第四種只有開發環境 時可以讀取到,生產環境讀取失敗。
推測主要原因是springboot內置tomcat,打包后是一個jar包,因此通過文件讀取獲取流的方式行不通,因為無法直接讀取壓縮包中的文件,讀取只能通過流的方式讀取。
前三種都可以讀取到其實殊途同歸,直接查看底層代碼都是通過類加載器讀取文件流,類加載器可以讀取jar包中的編譯后的class文件,當然也是可以讀取jar包中的文件流了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM