最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

通過(guò)Resource接口

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

手動(dòng)加載

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

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

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

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

或者是通過(guò)指定類(lèi)的類(lèi)加載器:

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

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

上面說(shuō)的方式都是相對(duì)于類(lèi)路徑的地址。如果想要指定某個(gè)類(lèi)的相對(duì)路徑,我們和可以通過(guò)指定具體類(lèi)來(lái)定義,比如:

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

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

通過(guò)@Value自動(dòng)轉(zhuǎn)換

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

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

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

通過(guò)ResourceLoader加載

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

@Autowired
ResourceLoader resourceLoader;

然后在我們需要的地方,通過(guò)ResourceLoader實(shí)例加載資源:

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

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

ApplicationContext context;

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

使用ResourceUtils加載資源

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

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

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

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

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

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

站點(diǎn):https://www.howardliu.cn
作者:看山
公號(hào):看山的小屋

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

通過(guò)File對(duì)象讀取

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

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

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

通過(guò)InputStream對(duì)象讀取

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

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)容兩個(gè)方法講解,給出了多種讀取方式。

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

相關(guān)文章

  • JAVA 自定義線(xiàn)程池的最大線(xiàn)程數(shù)設(shè)置方法

    JAVA 自定義線(xiàn)程池的最大線(xiàn)程數(shù)設(shè)置方法

    這篇文章主要介紹了JAVA 自定義線(xiàn)程池的最大線(xiàn)程數(shù)設(shè)置方法,文中示例代碼非常詳細(xì),供大家參考和學(xué)習(xí),感興趣的朋友可以了解下
    2020-06-06
  • 最新評(píng)論

    洪江市| 金阳县| 牟定县| 富锦市| 同江市| 盈江县| 石棉县| 巫溪县| 延川县| 洱源县| 柞水县| 城口县| 佛山市| 宝鸡市| 大埔县| 莆田市| 伊金霍洛旗| 类乌齐县| 镇雄县| 凤山市| 金沙县| 梁山县| 曲沃县| 申扎县| 南丰县| 景东| 乐至县| 准格尔旗| 定边县| 汤原县| 南部县| 翼城县| 上蔡县| 论坛| 安义县| 海晏县| 和林格尔县| 时尚| 天柱县| 正定县| 梅河口市|