在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