zoukankan      html  css  js  c++  java
  • 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("");

  • 相关阅读:
    permission 文档 翻译 运行时权限
    TabLayout ViewPager Fragment 简介 案例 MD
    Log 日志工具类 保存到文件 MD
    OkHttp 官方wiki 翻译 MD
    Okhttp 简介 示例 MD
    OkHttp 官方Wiki之【使用案例】
    DialogPlus
    倒计时 总结 Timer Handler CountDownTimer RxJava MD
    RecyclerView 判断滑到底部 顶部 预加载 更多 分页 MD
    CSS3的媒体查询(Media Queries)与移动设备显示尺寸大全
  • 原文地址:https://www.cnblogs.com/lgjava/p/13931478.html
Copyright © 2011-2022 走看看