激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - SpringBoot項目實戰之加載和讀取資源文件

SpringBoot項目實戰之加載和讀取資源文件

2022-02-28 13:16看山 Java教程

在項目的開發中,我們知道的是SpringBoot框架大大減少了我們的配置文件,但是還是留下了一個application.properties文件讓我們可以進行一些配置,下面這篇文章主要給大家介紹了關于SpringBoot項目實戰之加載和讀取資源文件的相關資料,需要

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

通過Resource接口

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

手動加載

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

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

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

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

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

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

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

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

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

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

通過@Value自動轉換

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

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

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

通過ResourceLoader加載

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

?
1
2
@Autowired
ResourceLoader resourceLoader;

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

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

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

?
1
2
3
4
5
ApplicationContext context;
 
public Resource loadEmployeesWithApplicationContext() {
    return context.getResource("classpath:data/resource-data.txt");
}

使用ResourceUtils加載資源

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

?
1
2
3
4
5
public File loadEmployeesWithSpringInternalClass()
  throws FileNotFoundException {
    return ResourceUtils.getFile(
      "classpath:data/resource-data.txt");
}

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

讀取資源中的內容

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

比如,我們的資源文件內容如下:

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

關注公號得福利

通過File對象讀取

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

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

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

通過InputStream對象讀取

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

?
1
2
3
4
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"));
}

讀取完畢。

文末總結

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

到此這篇關于SpringBoot項目實戰之加載和讀取資源文件的文章就介紹到這了,更多相關SpringBoot加載和讀取資源文件內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!

原文鏈接:https://blog.csdn.net/liuxinghao/article/details/120930968

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 欧美精品一区二区三区在线播放 | av在线观 | 一级毛片电影网 | 午夜国产成人 | 日本高清在线免费 | 97zyz成人免费视频 | 日韩视频二区 | 亚州综合一区 | 国内精品久久久久久久星辰影视 | 国产亚洲精品久久久久久久软件 | 成人三级电影网 | 国产色91 | 日本一区二区视频在线观看 | 色偷偷一区 | 亚洲 综合 欧美 动漫 丝袜图 | 久久精品视频免费 | 91精品久久久久久久久久久 | 91精品国产一区二区三区动漫 | 奶子吧naiziba.cc免费午夜片在线观看 | 黄免费观看视频 | 久草视频在线资源 | 国产成年人网站 | 福利免费在线 | 自拍偷拍999| 久久区二区| 99视频有精品视频高清 | 久久久久久高清 | 日本黄色一级毛片 | 成人免费在线观看视频 | 亚洲第一成人在线观看 | 国产精选电影免费在线观看 | 一级一级一级毛片 | 国产一区日韩一区 | 欧美 videos粗暴 | www.91成人| 精品欧美一区二区精品久久 | 欧美一级做一级爱a做片性 久久久资源网 | chinese中国真实乱对白 | 中文字幕电影免费播放 | 欧美一级黄色影院 | 国产一级二级在线播放 |