# Spring Resource实现对操作读取资源的增强 #
介绍
由于Spring的初始化加载通常都是要读取很多初始化参数的,通常都是从配置文件中读取。
Spring的配置文件所处环境相对复杂,Java自带读取配置文件的功能不能很好的满足Spring读取配置文件要求,因此Spring提供了Resource对其进行增强和支持。
Resource接口及实现应用
UrlResource
UrlResource封装了java.net.URL,它能够被用来访问任何通过URL可以获得的对象,例如:文件、HTTP对象、FTP对象等。
所有的URL都有个标准的String表示,这些前缀可以标识不同的URL类型,如file:访问文件系统路径,http:通过HTTP协议访问的资源,ftp:通过FTP访问的资源等
举例:
UrlResource urlResource = new UrlResource("file", "e:/testcopy.txt");
ClassPathResource
ClassPathResource这个类表示从classpath类路径获得的资源。
它会使用线程context的类加载器(classloader)、给定的类加载器或者用来载入资源的给定类。
举例:
ClassPathResource classPathResource = new ClassPathResource("config/mytest.txt");
ServletContextResource
这是为ServletContext资源提供的Resource实现,它负责解析相关web应用根目录中的相对路径。
备注:通常应用在java web开发中
FileSystemResource
这是为处理 java.io.File而准备的Resource实现。它既可以作为File提供,也可以作为URL。
InputStreamResource
这是为给定的InputStream而准备的Resource实现。它只有在没有其它合适的 Resource实现时才使用。
而且,只要有可能就尽量使用ByteArrayResource或者其它基于文件的Resource 实现。
ByteArrayResource
这是为给定的byte数组准备的Resource实现。它会为给定的byte数组构造一个 ByteArrayInputStream。
它在从任何给定的byte数组读取内容时很有用,因为不用转换成单一作用的 InputStreamResource。
备注:UrlResource、ClassPathResource、ServletContextResource重点掌握
Code
/**
*
* @author xuyi
* @时间: 2016年9月12日 下午10:08:27
* @功能:
* @类描述:各种Resource实现应用
* @春风十里不如你
*/
public class ResourceMain
{
/**
* URL资源类
*
* @throws Exception
*/
@Test
public void testUrlResource() throws Exception
{
UrlResource urlResource = new UrlResource("file", "e:/testcopy.txt");
InputStream inputStream = urlResource.getInputStream();
FileOutputStream outputStream = new FileOutputStream("e:/testurl.txt");
IOUtils.copy(inputStream, outputStream);
}
/**
* 类路径下的资源类
*
* @throws Exception
*/
@Test
public void testClassPathResource() throws Exception
{
ClassPathResource classPathResource = new ClassPathResource("config/mytest.txt");
InputStream inputStream = classPathResource.getInputStream();
FileOutputStream outputStream = new FileOutputStream("e:/mytest.txt");
IOUtils.copy(inputStream, outputStream);
}
/**
* 字节数组资源类
*
* @throws Exception
*/
@Test
public void testByteArrayResource() throws Exception
{
ByteArrayResource byteArrayResource = new ByteArrayResource("string".getBytes());
InputStream inputStream = byteArrayResource.getInputStream();
FileOutputStream outputStream = new FileOutputStream("e:/hahatest.txt");
IOUtils.copy(inputStream, outputStream);
}
/**
* 系统文件资源类
*
* @throws Exception
*/
@Test
public void testFileSystem() throws Exception
{
FileSystemResource fileSystemResource = new FileSystemResource("e:/test.txt");
InputStream inputStream = fileSystemResource.getInputStream();
FileOutputStream outputStream = new FileOutputStream("e:/testcopy.txt");
IOUtils.copy(inputStream, outputStream);
}
}
总结
读取特定环境下的配置文件,使用Spring的Resource不为是一种更方便的方式。
参考
1、http://docs.spring.io/spring/docs/4.2.7.RELEASE/spring-framework-reference/htmlsingle/#resources