亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

SpringBoot項目實戰(zhàn)之加載和讀取資源文件

 更新時間:2021年10月26日 10:03:07   作者:看山  
在項目的開發(fā)中,我們知道的是SpringBoot框架大大減少了我們的配置文件,但是還是留下了一個application.properties文件讓我們可以進行一些配置,下面這篇文章主要給大家介紹了關(guān)于SpringBoot項目實戰(zhàn)之加載和讀取資源文件的相關(guān)資料,需要的朋友可以參考下

本文聊一聊在 SpringBoot 應(yīng)用中,訪問加載類路徑(classpath)中的文件內(nèi)容的多種方法。

通過Resource接口

Resource接口抽象出一種更底層的方式管理資源,可以實現(xiàn)通過統(tǒng)一的方式處理各類文件資源。下面是幾種獲取資源實例的方法。

手動加載

訪問類路徑中的文件,我們可以直接使用ClassPathResource加載內(nèi)容,比如:

new ClassPathResource("data/resource-data.txt");

默認情況下,ClassPathResource會在線程的上下文類加載器和默認系統(tǒng)類加載器之間進行選擇,以刪除樣板文件。我們也可以直接指定類加載器,比如:

new ClassPathResource("data/resource-data.txt", this.getClass().getClassLoader());

或者是通過指定類的類加載器:

new ClassPathResource("data/resource-data.txt", Employee.class.getClassLoader());

從Resource對象,我們可以很容易的將其轉(zhuǎn)換為InputStream或File對象。

上面說的方式都是相對于類路徑的地址。如果想要指定某個類的相對路徑,我們和可以通過指定具體類來定義,比如:

new ClassPathResource("../../../data/resource-data.txt", Example.class).getFile();

這樣就是相對于Example的相對路徑了。在實際使用中,不太建議通過類獲取其相對路徑的文件。這樣會將類與文件的相對坐標綁定,如果修改了類的包路徑,但是忘記修改文件位置,就會出現(xiàn)錯誤。而且,大家現(xiàn)在一般是使用 Maven 之類的包管理器管理,可以直接在resources目錄中定義配置文件,使用類路徑的相對地址加載文件即可。

通過@Value自動轉(zhuǎn)換

我們還可以使用@Value直接注入Resource對象,比如:

@Value("classpath:data/resource-data.txt")
Resource resourceFile;

@Value還能支持其他的加載協(xié)議,比如file:或url:。

通過ResourceLoader加載

我們還能使用注入ResourceLoader來實現(xiàn)資源的懶加載,比如,先注入ResourceLoader實例:

@Autowired
ResourceLoader resourceLoader;

然后在我們需要的地方,通過ResourceLoader實例加載資源:

resourceLoader.getResource("classpath:data/resource-data.txt");

在 Spring 中,ApplicationContext實現(xiàn)了ResourceLoader,所以,我們也可以直接通過ApplicationContext實例加載資源,比如:

ApplicationContext context;

public Resource loadEmployeesWithApplicationContext() {
    return context.getResource("classpath:data/resource-data.txt");
}

使用ResourceUtils加載資源

在 Spring 內(nèi)部,還提供了一個工具類ResourceUtils,可以很方便的獲取類路徑中額資源。但是通過這個類的 Javadoc 可以看到,這個類主要是在 Spring 內(nèi)部使用,也就是說,不太推薦這種用法。不過我們可以了解一下:

public File loadEmployeesWithSpringInternalClass() 
  throws FileNotFoundException {
    return ResourceUtils.getFile(
      "classpath:data/resource-data.txt");
}

我們可以了解其內(nèi)部實現(xiàn),但是還是建議使用其他更加標準的做法。

讀取資源中的內(nèi)容

上面都是通過各種方式獲取了Resource資源,接下來我們就聊聊如果獲取資源對象的數(shù)據(jù)。

比如,我們的資源文件內(nèi)容如下:

站點:https://www.howardliu.cn
作者:看山
公號:看山的小屋

關(guān)注公號得福利

通過File對象讀取

我們可以使用getFile方法得到File實例,就可以用讀取File對象的方式讀取文件了,比如:

@Test
File resource = new ClassPathResource("data/resource-data.txt").getFile();
String content = new String(Files.readAllBytes(resource.toPath()));

但是這種方式不適用與讀取 jar 包中的文件,鑒于現(xiàn)在很多應(yīng)用都是通過 FatJar 方式部署,我們還需要找找其他方式。

通過InputStream對象讀取

File對象不適合 jar 包中資源讀取的原因在于文件路徑格式不一樣,所以我們可以直接將資源內(nèi)容讀取為流的形式,這樣就沒有文件路徑的問題了。比如:

InputStream resource = new ClassPathResource("data/resource-data.txt").getInputStream();
try (BufferedReader reader = new BufferedReader(new InputStreamReader(resource))) {
    String content = reader.lines().collect(Collectors.joining("\n"));
}

讀取完畢。

文末總結(jié)

本文從加載資源、讀取內(nèi)容兩個方法講解,給出了多種讀取方式。

到此這篇關(guān)于SpringBoot項目實戰(zhàn)之加載和讀取資源文件的文章就介紹到這了,更多相關(guān)SpringBoot加載和讀取資源文件內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java中使用jaxp進行sax解析_動力節(jié)點Java學(xué)院整理

    Java中使用jaxp進行sax解析_動力節(jié)點Java學(xué)院整理

    使用SAX的優(yōu)勢在于其解析速度較快,相對于DOM而言占用內(nèi)存較少。這篇文章主要介紹了Java中使用jaxp進行sax解析,需要的朋友可以參考下
    2017-08-08
  • Java 17 更快的 LTS 節(jié)奏

    Java 17 更快的 LTS 節(jié)奏

    這篇文章主要介紹的是Java 17 更新后的LTS,現(xiàn)在 Java 17 的發(fā)布,讓 Java 11 成了 LTS 系列的次新版本,下面我們就來看看Java 17 的更新 LTS有什么變化吧
    2021-09-09
  • Elasticsearch 基礎(chǔ)介紹及索引原理分析

    Elasticsearch 基礎(chǔ)介紹及索引原理分析

    這篇文章主要介紹了Elasticsearch 基礎(chǔ)介紹及索引原理分析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-07-07
  • 分享7款開源Java反編譯工具

    分享7款開源Java反編譯工具

    今天我們要來分享一些關(guān)于Java的反編譯工具,反編譯聽起來是一個非常高上大的技術(shù)詞匯,通俗的說,反編譯是一個對目標可執(zhí)行程序進行逆向分析,從而得到原始代碼的過程。尤其是像.NET、Java這樣的運行在虛擬機上的編程語言,更容易進行反編譯得到源代碼
    2014-09-09
  • java郵件發(fā)送簡單實現(xiàn)代碼

    java郵件發(fā)送簡單實現(xiàn)代碼

    這篇文章主要為大家詳細介紹了java郵件發(fā)送簡單實現(xiàn)代碼,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-03-03
  • Spring?Data?JPA實現(xiàn)審計功能過程詳解

    Spring?Data?JPA實現(xiàn)審計功能過程詳解

    Spring?Data?JPA為跟蹤持久性層的變化提供了很好的支持。通過使用審核,我們可以存儲或記錄有關(guān)實體更改的信息,例如誰創(chuàng)建或更改了實體以及何時進行更改
    2023-02-02
  • JAVA利用HttpClient進行HTTPS接口調(diào)用的方法

    JAVA利用HttpClient進行HTTPS接口調(diào)用的方法

    本篇文章主要介紹了JAVA利用HttpClient進行HTTPS接口調(diào)用的方法,具有一定的參考價值,有興趣的可以了解一下
    2017-08-08
  • Java設(shè)計模式之Builder建造者模式

    Java設(shè)計模式之Builder建造者模式

    這篇文章主要為大家詳細介紹了Java設(shè)計模式之Builder建造者模式的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-03-03
  • 深入理解Java設(shè)計模式之迭代器模式

    深入理解Java設(shè)計模式之迭代器模式

    這篇文章主要介紹了JAVA設(shè)計模式之迭代器模式的的相關(guān)資料,文中示例代碼非常詳細,供大家參考和學(xué)習(xí),感興趣的朋友可以了解
    2021-11-11
  • spring 自動注入AutowiredAnnotationBeanPostProcessor源碼解析

    spring 自動注入AutowiredAnnotationBeanPostProcessor源碼解析

    這篇文章主要介紹了spring自動注入AutowiredAnnotationBeanPostProcessor源碼解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-03-03

最新評論