org.springframework.core.io Resource 用法
org.springframework.core.io.Resource
是 Spring 框架中用于统一资源访问的接口。Spring 提供了多种实现 Resource
接口的方式,以便于你从不同的来源(如文件系统、类路径、URL 等)加载资源。使用 Resource
接口可以让你以一种抽象的方式处理资源加载,而不必关心底层资源的物理位置或加载机制。
常见的 Resource
实现
UrlResource
:从 URL 中加载资源。FileSystemResource
:从文件系统中加载资源。ClassPathResource
:从类路径中加载资源。ServletContextResource
:从 Servlet 上下文中加载资源,通常用于 Web 应用中。
常用方法
Resource
接口提供了一些方法来访问资源的元数据和内容:
InputStream getInputStream()
: 打开资源的InputStream
。boolean exists()
: 资源是否存在。boolean isReadable()
: 资源是否可读。boolean isOpen()
: 检查资源是否是打开的。URL getURL()
: 返回资源的 URL 句柄。URI getURI()
: 返回资源的 URI 句柄。File getFile()
: 返回资源的File
句柄。long contentLength()
: 资源文件的长度。long lastModified()
: 文件最后修改时间。
使用示例
以下是如何使用不同类型的 Resource
来加载资源文件的示例:
从类路径加载文件
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class ResourceExample {
public static void main(String[] args) throws Exception {
Resource resource = new ClassPathResource("data/example.txt");
try (BufferedReader reader = new BufferedReader(new InputStreamReader(resource.getInputStream()))) {
String line;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
}
}
}
从文件系统加载文件
import org.springframework.core.io.FileSystemResource;
import org.springframework.core.io.Resource;
public class FileSystemResourceExample {
public static void main(String[] args) throws Exception {
Resource resource = new FileSystemResource("/path/to/your/file.txt");
if (resource.exists()) {
String content = new String(resource.getInputStream().readAllBytes());
System.out.println(content);
} else {
System.out.println("File does not exist");
}
}
}
从 URL 加载文件
import org.springframework.core.io.UrlResource;
import org.springframework.core.io.Resource;
public class UrlResourceExample {
public static void main(String[] args) throws Exception {
Resource resource = new UrlResource("http://example.com/data.txt");
if (resource.exists()) {
String content = new String(resource.getInputStream().readAllBytes());
System.out.println(content);
} else {
System.out.println("Resource not available");
}
}
}
总结
Spring 的 Resource
接口提供了一种统一的方法来加载和处理各种来源的资源,使得代码更加灵活和可重用。通过不同的实现类,你可以透明地从文件系统、类路径、URL 等地方访问资源。