1. 资源的种类
1)文件资源,比如操作系统的文件
2)程序资源,比如二进制数据、输入流资源、类路径下的资源
3)网络资源,比如http资源、ftp资源等
2. spring资源抽象Resource
资源种类比较多,不能进行资源的统一操作使用,这样spring为我们抽象出了Resource接口,
它可以代表各类资源,并提供了统一的方法
Resource接口方法.png
我们一般常用的方法都有,看着是不是有点眼熟
这些其实主要实现呢,是在AbstractResource这个抽象类里,它实现了Resource接口
而大部分的具体资源类呢,是继承了AbstractResource抽象类,主要的一些具体资源类如下:
详细资源类.png
比如主要有如下一些:
1)数组资源 ByteArrayResource
2)编码资源 EncodedResource
3)文件系统资源 FileSystemResource
4)输入流资源 InputStreamResource
5)网络、系统资源 UrlResource
可以看一下简单使用:
package basic.resource;
import java.io.IOException;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;
import org.springframework.core.io.UrlResource;
import org.springframework.core.io.support.EncodedResource;
import org.springframework.util.FileCopyUtils;
public class ResourceTest {
public static void main(String[] args) throws IOException {
//url资源读取内容
Resource r1 = new UrlResource("https://www.jianshu.com/p/5c5cacf9c762");
EncodedResource er = new EncodedResource(r1, "utf-8");
String content = FileCopyUtils.copyToString(er.getReader());
System.out.println("内容:" + content);
//读取类路径资源
Resource r2 = new ClassPathResource("application.properties");
System.out.println("文件名:" + r2.getFilename());
System.out.println("文件长度:" + r2.contentLength() + "字节");
System.out.println("文件最后修改:" + r2.lastModified());
}
}
//输出:
内容(内容较长,截取一点):<!DOCTYPE html>
<html data-n-head-ssr lang="zh-CN" data-n-head="lang">
<meta name="applicable-device" content="pc,mobile">
文件名:application.properties
文件长度:342
文件最后修改:1643547826422
3. 资源加载ResourceLoader
上面是统一抽象了,但还需要知道具体的实现类,有点讨厌,spring当然也为了抽象了资源加载ResourceLoader,当然还有一些扩展接口ResourcePatternResolver,可以支持ant风格的资源表达方式,并且还提供了一个标准实现类,PathMatchingResourcePatternResolver
简单看一个示例:
这个是我们的文件目录
本地文件目录.png
这个是我们的读取代码:
PathMatchingResourcePatternResolver rpr = new PathMatchingResourcePatternResolver();
Resource[] rs = rpr.getResources("file:D:/临时文件/a/a/2*.txt");
for(Resource r : rs) {
System.out.println(r.getFilename() + "," + r.lastModified());
//输出
2.txt,1644309349718
22.txt,1644309367446
这里我们读取了本地系统目录,以2开头的文件
细心的你,应该看到文件路径前加了file:标识,表示是一个文件系统目录资源,而不是类路径下的资源,
主要的资源前缀有如下:
classpath:
从类路径下加载资源,可以以/开头,也可以不需要,资源文件可以在jar或是zip的类包中
file:
从文件目录加载资源
http:
从web服务器加载资源
ftp:
从ftp服务器加载资源
前面提到,还有一个ant风格的地址形式,比如:
classpath*:com/my/**/a/*/b?c*.xml,
这里?表示单个字符,*任意多个字符,**匹配多层路径
它能表示哪些路径资源呢?欢迎您的回复!-_-
网友评论