欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

使用springboot打包后的文件讀取方式

 更新時(shí)間:2021年08月18日 11:01:49   作者:DDF_YiChen  
這篇文章主要介紹了使用springboot打包后的文件讀取方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

springboot打包后的文件讀取

在使用了springboot打包后的項(xiàng)目中,牽扯到項(xiàng)目目錄中文件讀取工作時(shí),明明在開(kāi)發(fā)時(shí)功能正常,但是一到發(fā)布到線上環(huán)境就會(huì)報(bào)文件找不到,路徑不存在的問(wèn)題。

由于在開(kāi)發(fā)過(guò)程中,文件就在我們本地目錄中存在,因此普通正常文件的讀寫(xiě)功能不受影響,而一旦打包后,可能會(huì)由于我們自己的文件目錄放置原因一是沒(méi)有被正確打包到j(luò)ar包中,第二個(gè)即使被打包進(jìn)去,由于jar包并不會(huì)解壓到服務(wù)器中,因此如果我們按照正常的文件路徑去獲取文件的時(shí)候還是會(huì)報(bào)異常。

文件打包問(wèn)題

首先是確認(rèn)我們自己的文件有沒(méi)有被打包到j(luò)ar包中,默認(rèn)的如果文件在src/main/resources目錄下的時(shí)候是會(huì)打包的,但如果不在目錄中,我們可以通過(guò)在pom.xml中配置以下指明我們的資源文件所在。拿個(gè)mybatis的mapper.xml文件舉例,我們將沒(méi)有放到了java源碼目錄中了,則需要通過(guò)以下配置指定目錄所在

 <build>
     <resources>
         <resource>
             <directory>src/main/java</directory>
             <includes>
                 <include>**/*.xml</include>
             </includes>
         </resource>
     </resources>
 </build>

文件讀取問(wèn)題

記住一個(gè)準(zhǔn)則,凡是要通過(guò)路徑獲取文件的方法都會(huì)報(bào)錯(cuò),但是通過(guò)流的方式卻是可以工作的。我們拿spring提供的一個(gè)類org.springframework.core.io.ClassPathResource來(lái)解決讀取問(wèn)題。

ClassPathResource classPathResource = new ClassPathResource(path);
InputStream inputStream = classPathResource.getInputStream();
// 流獲取到了就可以做自己想要的讀取操作了

但是還有一些情況,我們就是要獲取文件然后做一些操作,比如我需要通過(guò)文件構(gòu)造RandomAccessFile對(duì)象然后來(lái)實(shí)現(xiàn)某些功能,當(dāng)然我目前還沒(méi)發(fā)現(xiàn)通過(guò)流來(lái)構(gòu)造這個(gè)對(duì)象的,所以不知道還有沒(méi)有別的方法。

這種情況先獲取到流然后重新生成一個(gè)新的文件,然后我們最終讀取的是我們復(fù)制的那個(gè)文件,而不對(duì)原始文件操作,這樣這個(gè)文件就是在真實(shí)路徑中存在的。舉個(gè)簡(jiǎn)單的代碼例子,我們?cè)趕rc/main/resources下有一個(gè)test.txt文件,我們可以在要讀取文件(要保證只執(zhí)行一次)或者簡(jiǎn)單粗暴在項(xiàng)目啟動(dòng)的時(shí)候復(fù)制一下文件。

String path = "test.txt";
ClassPathResource classPathResource = new ClassPathResource(path);
// 我們要將文件復(fù)制到服務(wù)器的某個(gè)目錄
String targetPath = "/app/file/test.txt";
// 通過(guò)原始文件流復(fù)制文件
Files.copy(classPathResource.getInputStream(), Paths.get(targetPath ), StandardCopyOption.REPLACE_EXISTING);
// 然后通過(guò)復(fù)制的文件進(jìn)行操作
new RandomAccessFile(targetPath, "r");

Springboot打包后讀取不到文件

SpringBoot部署后文件找不到的問(wèn)題

項(xiàng)目引用了一個(gè)xml作為模板

在這里插入圖片描述

本地訪問(wèn)文件的時(shí)候使用的方式比較直接

Document document = reader.read(ResourceUtils.getURL("classpath:").getPath() + "xmlTemplate.xml");

直接訪問(wèn)classpath下的xmlTemplate,這種方式在本地運(yùn)行的時(shí)候能取到文件,但是項(xiàng)目在打包再發(fā)布以后,問(wèn)題就出來(lái)了…

在這里插入圖片描述

解決辦法1 失敗。。

在pom中的build中 直接配置resources

   <build>
        <resources>
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.xml</include>
                </includes>
                <filtering>true</filtering>
            </resource>
            <resource>
                <directory>src/main/resources</directory>
                <includes>
                    <include>**/*.*</include>
                </includes>
            </resource>
        </resources>
   </build>

這個(gè)配置的作用是告訴maven哪些文件需要被打進(jìn)包里。這時(shí)我看了一眼打好的jar包,確實(shí)里面是有我的文件的,但是此時(shí)代碼報(bào)錯(cuò) 找不到文件。

在這里插入圖片描述

解決辦法 2

換一種取文件的方式,因?yàn)橐呀?jīng)確定打好的包中是有文件的新的方式

        ClassPathResource resource = new ClassPathResource("xmlTemplate.xml");
        Document document = reader.read(resource.getInputStream());

解決了..

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • springboot的緩存技術(shù)的實(shí)現(xiàn)

    springboot的緩存技術(shù)的實(shí)現(xiàn)

    這篇文章主要介紹了springboot的緩存技術(shù)的實(shí)現(xiàn),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-05-05
  • java讀取excel圖片導(dǎo)入代碼示例(親測(cè)有效)

    java讀取excel圖片導(dǎo)入代碼示例(親測(cè)有效)

    在日常工作中,我們經(jīng)常要將一些照片插入到Excel表格中,這篇文章主要給大家介紹了關(guān)于java讀取excel圖片導(dǎo)入的相關(guān)資料,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-10-10
  • SpringBoot+Docker+IDEA實(shí)現(xiàn)一鍵構(gòu)建+推送、運(yùn)行、同鏡像多容器啟動(dòng)

    SpringBoot+Docker+IDEA實(shí)現(xiàn)一鍵構(gòu)建+推送、運(yùn)行、同鏡像多容器啟動(dòng)

    這篇文章主要介紹了SpringBoot+Docker+IDEA實(shí)現(xiàn)一鍵構(gòu)建+推送、運(yùn)行、同鏡像多容器啟動(dòng),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • SpringBoot靜態(tài)資源配置原理(源碼分析)

    SpringBoot靜態(tài)資源配置原理(源碼分析)

    這篇文章主要介紹了SpringBoot靜態(tài)資源配置原理(源碼分析),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • Java反射技術(shù)詳解及實(shí)例解析

    Java反射技術(shù)詳解及實(shí)例解析

    這篇文章主要介紹了Java反射技術(shù)詳解及實(shí)例解析,反射可以說(shuō)是Java中最強(qiáng)大的技術(shù)了,它可以做的事情太多太多,很多優(yōu)秀的開(kāi)源框架都是通過(guò)反射完成的。如果對(duì)JAVA感興趣來(lái)可以學(xué)習(xí)一下
    2020-07-07
  • SpringBoot 集成 activiti的示例代碼

    SpringBoot 集成 activiti的示例代碼

    這篇文章主要介紹了SpringBoot 集成 activiti的示例代碼,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-10-10
  • Java數(shù)組實(shí)例練習(xí)題整理

    Java數(shù)組實(shí)例練習(xí)題整理

    在本篇文章中小編給各位分享的是關(guān)于Java數(shù)組實(shí)例練習(xí)題以及相關(guān)代碼整理,有需要的朋友們跟著學(xué)習(xí)下。
    2019-07-07
  • SpringBoot?自定義注解之脫敏注解詳解

    SpringBoot?自定義注解之脫敏注解詳解

    這篇文章主要介紹了SpringBoot?自定義注解之脫敏注解詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • Java如何通過(guò)反射獲取對(duì)象的屬性和值

    Java如何通過(guò)反射獲取對(duì)象的屬性和值

    這篇文章主要介紹了Java如何通過(guò)反射獲取對(duì)象的屬性和值問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-02-02
  • java實(shí)現(xiàn)簡(jiǎn)單圖片上傳下載功能

    java實(shí)現(xiàn)簡(jiǎn)單圖片上傳下載功能

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)簡(jiǎn)單圖片上傳下載功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-10-10

最新評(píng)論