Java基础、中级、高级、架构面试资料

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

JAVA herman 9527浏览 0评论
公告:“业余草”微信公众号提供免费CSDN下载服务(只下Java资源),关注业余草微信公众号,添加作者微信:xttblog2,发送下载链接帮助你免费下载!
本博客日IP超过2000,PV 3000 左右,急需赞助商。
极客时间所有课程通过我的二维码购买后返现24元微信红包,请加博主新的微信号:xttblog2,之前的微信号好友位已满,备注:返现
受密码保护的文章请关注“业余草”公众号,回复关键字“0”获得密码
所有面试题(java、前端、数据库、springboot等)一网打尽,请关注文末小程序
视频教程免费领
腾讯云】1核2G5M轻量应用服务器50元首年,高性价比,助您轻松上云

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("");

业余草公众号

最后,欢迎关注我的个人微信公众号:业余草(yyucao)!可加作者微信号:xttblog2。备注:“1”,添加博主微信拉你进微信群。备注错误不会同意好友申请。再次感谢您的关注!后续有精彩内容会第一时间发给您!原创文章投稿请发送至532009913@qq.com邮箱。商务合作也可添加作者微信进行联系!

本文原文出处:业余草: » FileSystemResource 和 ClassPathResource 以及 ServletContextResource 获取资源用法