zoukankan      html  css  js  c++  java
  • 在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: esting.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.

    总结

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

    关于我自己

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

  • 相关阅读:
    11-Mybatis中使用PageHelper分页插件
    10-Mybatis使用注解开发
    Windows快捷键
    环境搭建
    计算机基础
    oracle语句
    oracle
    测试质量和类型
    测试基础
    项目部署和总结
  • 原文地址:https://www.cnblogs.com/zhuyeshen/p/11435425.html
Copyright © 2011-2022 走看看