引言: 在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.
總結
古語有雲:工欲善其事,必先利其器。好的工具和方法可以讓工作變得輕松,如魚得水,用更少的代碼完成更多的任務,多總結多分析,多積累,才有效率的提升。
關於我自己
這些技巧和總結都是來自於實際的工作,歡迎大家反饋和提出自己的意見。
文章也會同步發在今日頭條的頭條號上,搜索 “程序加油站”,就可以找到。