在Spring Boot快捷地讀取文件內容的若干種方式


引言: 在Spring Boot構建的項目中,在某些情況下,需要自行去讀取項目中的某些文件內容,那該如何以一種輕快簡單的方式讀取文件內容呢? 
這里寫圖片描述

基於ApplicationContext讀取

在Spring Bean中獲取ApplicationContext引用的方式:

 @Component public class MyBean implement ApplicationContextAware { private static ApplicationContext context; public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { context = applicationContext; } public static ApplicationContext getApplicationContext() { return context; } .......... } 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

關於如何動態注入ApplicationContext的方法,可以參見筆者之前的文章:動態注入Spring中的Bean實例快速指南

在獲取了ApplicationContext實例之后,就可以基於applicationContext動態讀取文件內容了:

使用fileSystem

Resource resource = appContext.getResource(“file:d:\testing.jpg”);

使用url path

Resource resource = appContext.getResource(“url:http://www.test.com/testing.txt“);

基於classpath

Resource resource = appContext.getResource(“classpath:resources/common/test.txt”); 
在獲取resource對象之后,就可以獲取file的對象,從而可以讀取文件內容。

基於ResourceLoader

在Spring中專門提供了一個ResourceLoader的接口來方便進行classpath的路徑訪問。 
基於Aware方式注入ResourceLoader,具體的方式如下:

  public class MyBean implements ResourceLoaderAware { private ResourceLoader resourceLoader; public void setResourceLoader(ResourceLoader resourceLoader) { this.resourceLoader = resourceLoader; } public Resource getResource(String location){ return resourceLoader.getResource(location); } ....... }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

第二種方式為,直接基於@Bean的方式在Spring Boot中創建對應的實例,具體方式如下:

    .....
    @Bean public ResourceLoader createResourceLoader() { return new DefaultResourceLoader(); } .....
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

以上兩種方式都可以實現ResourceLoader對象的創建。

在獲取ResourceLoader的對象實例之后,將可以基於如下方式來獲取配置信息:

Resource resource = resourceLoader.getResource(“classpath:resources/config.xml”);

另外一種方式可以直接讀取文件的內容:

String content = IOUtil.toString(resourceLoader.getResource( 
“classpath:resources/test.txt”).getInputStream());

IOUtil是Apache common項目中的IO類庫包,可以通過以下方式來直接加入依賴:

<dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.6</version> </dependency>
  • 1
  • 2
  • 3
  • 4
  • 5

何為classpath

在Maven項目中,所有的resources文件都將被復制到classes目錄下。classpath在tomcat項目中就是/classes,/lib和tomcat下的其他路徑。 
對於開發者來說,一般就是classes所在目錄就是classpath路徑的起點和base path.

總結

古語有雲:工欲善其事,必先利其器。好的工具和方法可以讓工作變得輕松,如魚得水,用更少的代碼完成更多的任務,多總結多分析,多積累,才有效率的提升。 
這里寫圖片描述

關於我自己

這些技巧和總結都是來自於實際的工作,歡迎大家反饋和提出自己的意見。 
文章也會同步發在今日頭條的頭條號上,搜索 “程序加油站”,就可以找到。


免責聲明!

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



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