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

JAVA herman 2481浏览 0评论
公告:“业余草”微信公众号提供免费CSDN下载服务,关注业余草微信公众号,添加作者微信:xmtxtt,发送下载链接帮助你免费下载!
本博客日IP超过1300,PV 1800 左右,急需赞助商。
打开支付宝首页搜“567452957”领红包,间接赞助博主,谢谢!

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)!可加QQ1群:135430763(2000人群已满),QQ2群:454796847(已满),QQ3群:187424846(已满)。QQ群进群密码:xttblog,想加微信群的朋友,可以微信搜索:xmtxtt,备注:“xttblog”,添加助理微信拉你进群。备注错误不会同意好友申请。再次感谢您的关注!后续有精彩内容会第一时间发给您!原创文章投稿请发送至532009913@qq.com邮箱。商务合作可添加助理微信进行沟通!

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