• FileSystemResource 和 ClassPathResource 以及 ServletContextResource 获取资源用法


    FileSystemResource 和 ClassPathResource 是 java 中比较常见的两个获取资源的类。除了他们两个之外,还有一个也比较常用。那就是 ServletContextResource。本文介绍他们三个的用法。

    FileSystemResource 是 Spring 提供的资源访问类。FileSystemResource 类相比其他两个资源访问类,没有什么优势,它只是在 File 类的基础上略作封装。

    /*默认从文件系统的当前路径加载xttblog.xml资源*/
    FileSystemResource fsr = new FileSystemResource("xttblog.xml");

    FileSystemResource 实例可使用 FileSystemResource 构造器显示地创建,但更多的时候它都是隐式创建。执行 Spring 的某个方法时,该方法接受一个代表资源路径的字符串参数,当 Spring 识别该字符串参数中包含file:前缀后,系统将会自动创建FileSystemResource 对象。

    ClassPathResource 也是 Spring 框架提供的类。利用ClassPathResource读取xml配置的基本思路就是通过构造函数传入的文件路径,接着交给class或者classLoader,调用getResourceAsStream获取到InputStream。

    FileSystemResource 和 ClassPathResource 的用法如下:

    String filePath = "D:/com/xttblog.txt";
    //使用系统文件路径方式加载文件
    Resource res1 = new FileSystemResource(filePath);
    //使用类路径方式加载文件
    Resource res2 = new ClassPathResource("conf/xttblog.txt");
    InputStream ins1 = res1.getInputStream();
    InputStream ins2 = res2.getInputStream();
    getFileName();//获取文件名
    getFile();//获取资源对应的File对象
    getInputStream();//获取文件的输入流
    createRelative(String relativePath);//在相对地址创建新文件
    
    EncodedResource encRes = new EncodedResource(res, "UTF-8");
    String content = FileCopyUtils.copyToString(encRes.getReader());
    
    ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
    Resource resources[] = resolver.getResources("classpath*://com/***/*.xml");
    For(Resource resource : resources){
       System.out.println(resource.getDescription);
    }

    ClassPathResource、 FileSystemResource、InputStreamResource、ServletContextResource、 UrlResource 的区别如下:

    • ClassPathResource 从系统的类路径中加载 
    • FileSystemResource 从文件系统加载,比如说自己指定配置文件的全路径 
    • InputStreamResource 从输入流中加载 
    • ServletContextResource 从Servlet 上下文环境中加载 
    • UrlResource 从指定的Url加载

    Class.getResource("")获取的是相对于当前类的相对路径。Class.getResource("/")获取的是classpath的根路径。ClassLoader.getResource("")获取的是classpath的根路径。

    在创建ClassPathResource对象时,我们可以指定是按Class的相对路径获取文件还是按ClassLoader来获取。

    FileSystemResource 效果类似于Java中的File
    ClassPathResource 效果类似于this.getClass().getResource("/").getPath();
    ServletContextResource 效果类似于request.getServletContext().getRealPath("");

  • 相关阅读:
    [51nod1474]宝藏图
    web h5常用代码总结
    ionic app 热更新
    ionic3——ion-scroll无法使用scrollTo的问题
    git操作
    uniapp开发
    uniapp 之navigateTo:fail page 跳转路径不对
    微信小程序之登录用户不是该小程序的开发者
    ionic slide组件使用
    ionic使用自定义icon
  • 原文地址:https://www.cnblogs.com/lgjava/p/13931478.html
Copyright © 2020-2023  润新知