在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.

总结

古语有云:工欲善其事,必先利其器。好的工具和方法可以让工作变得轻松,如鱼得水,用更少的代码完成更多的任务,多总结多分析,多积累,才有效率的提升。 
这里写图片描述

关于我自己

这些技巧和总结都是来自于实际的工作,欢迎大家反馈和提出自己的意见。 
文章也会同步发在今日头条的头条号上,搜索 “程序加油站”,就可以找到。

posted @ 2019-08-30 16:01  那些年的代码  阅读(2553)  评论(0编辑  收藏  举报