# Spring教程 - 13 资源操作
在开发的时候,我们经常需要处理各种资源,比如配置文件、图片、模板文件等。Spring 提供了一个强大的资源抽象层,让我们能够以统一的方式访问这些资源,而不用关心它们的具体存储位置。
想象一下,你的应用可能需要从以下地方加载资源:
- 类路径下(classpath)
- 文件系统中
- 网络URL
- JAR包内部
Spring 的 Resource
接口和 ResourceLoader
接口就是为了解决这些问题而生的。它们提供了统一的API来访问这些不同类型的资源。
# 13.1 Resource 接口
Resource
是 Spring 资源访问的核心接口,它定义了访问资源的基本方法。你可以把它想象成一个更强大的 java.io.File
类,它不仅支持文件系统,还支持类路径、URL等多种资源类型。
Resource 接口定义如下:
public interface Resource extends InputStreamSource {
// 资源是否存在
boolean exists();
// 资源是否可读
boolean isReadable();
// 资源是否已打开
boolean isOpen();
// 是否代表文件系统中的一个文件
boolean isFile();
// 获取资源的URL
URL getURL() throws IOException;
// 获取资源的URI
URI getURI() throws IOException;
// 如果资源是文件系统资源,返回对应的File对象
File getFile() throws IOException;
// 获取资源内容的长度
long contentLength() throws IOException;
// 获取资源最后修改时间
long lastModified() throws IOException;
// 根据相对路径创建新资源
Resource createRelative(String relativePath) throws IOException;
// 获取资源的文件名
String getFilename();
// 获取资源的描述信息
String getDescription();
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
Spring 针对不同的资源类型提供了多种 Resource
的实现,常见的实现类如下:
ClassPathResource
:获取 classpath 下的资源(jar 内也可,但不能getFile()
)。FileSystemResource
:获取磁盘文件系统中的资源,指定绝对或相对路径。UrlResource
:获取http/ftp/file://
前缀指定的URL资源。ServletContextResource
:获取 web 应用(/WEB-INF/...
)下的资源。ByteArrayResource
:内存字节数组资源(可重复读取)。InputStreamResource
:包装单次可读的 InputStream(注意:通常不可重复读取)。WritableResource
:可写资源接口(如某些文件资源实现)。
下面简单演示一下 ClassPathResource
、FileSystemResource
、UrlResource
的使用。
内容未完......