Spring 资源访问利器
2014-05-28 15:54
260 查看
Spring 设计了一个Resource接口,它为应用提供了更强大的访问底层资源的能力。该接口拥有对应不同资源类型的实现类。
Resource 接口的主要方法:
boolean exists() :资源是否存在;
boolean isOpen() 资源是否打开;
URL getURL() throws IOException 如果底层资源可以表示成URL,该方法返回对应的URL对象;
File getFile() throws IOException 如果底层资源对应的一个文件,该方法返回对应的File对象;
InputStream getInputStream() IOException 返回资源对应的输入流。
Resource 在Spring框架中起着不可或缺的作用,Spring框架使用Resource装载各种资源,这些资源包括配置文件资源、国际化属性文件资源等。Resource 的具体实现类如下图:
ByteArrayResource 二进制数组表示的资源,二进制数组资源可以在内存中通过程序构造。
ClassPathResource 类路径下的资源,资源相当于类路径的方式表示。
FileSystemResource 文件系统资源,资源文件系统路径的方式表示。例如:D:/conf/bean.xml
InputStreamResource 以输入流返回表示的资源。
ServletContextResource 为访问web上下文中的资源而设计的类,负责以相对于web应用根目录的路径加载资源,它支持以流和URL的方式访问,在war解包情况下,也可以通过File的方式访问,该类还可以直接从jar包中访问资源;
UrlResource Url封装了java.net.URL ,它使用户能够访问任何可以通URL表示的资源,如文件系统的资源、HTTP资源、FTP资源等
Spring 的Resource接口及其实现类可以在脱离Spring框架的情况下使用,它比通过JDK访问资源的API更好用,更强大。
资源加载
资源地址表达式:
Ant风格资源地址支持3种匹配符:
?:匹配文件名中的一个字符
* :匹配文件名中任意一个字符
** :匹配多层路径
下面是几个Ant风格的资源路径示例:
classpath:com/t?xt.xml :匹配com路径下com/text.xml ,com/tast.xml或者com/txst.xml;
file:D:/conf/*.xml :匹配文件系统D:/conf目录下所有以xml为后缀的文件;
classpath:com/**/test.xml : 匹配com路径下(当前目录及其子孙目录)的test.xml文件;
classpath:org/springframwork/**/*.xml : 匹配类路径 org/springframwork 下所有的以xml位后缀的文件。
资源加载器:
spring定义了一套资源加载的接口
ResourceLoader 接口仅有一个getResource(String location)的方法,可以根据一个资源地址加载文件资源,不过,资源地址仅支持带资源类型前缀的表达式,不支持Ant风格的资源路径表达式。ResourcePatternResolver 扩展了ResourceLoader 接口,定义了一个新的接口方法:getResources(String
locationPattern),该方法支持带资源类型前缀及Ant风格的资源路径的表达式。
PathMatchingResourceResolver 是Spring提供了标准实现类。
分享一个案例,有一次帮朋友邮件一个1GB多的文件,做了分卷压缩,结果弄了一桌面的压缩文件。一个一个删除不是个很好的办法。不知道怎么的,脑子突然想出了这个方法,结果还是很奏效的。一下子个删除完了。
public class Test001 {
public static void main(String[] args) throws IOException {
ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
Resource[] resources = resolver
.getResources("file:C:/Documents
and Settings/Administrator/桌面/*.rar");
System.out.println(resources.length);
for (Resource resource : resources) {
System.out.println("delete *.rar " + resource.getFile().delete());
System.out.println(resource.getFilename());
}
}
}
Resource 接口的主要方法:
boolean exists() :资源是否存在;
boolean isOpen() 资源是否打开;
URL getURL() throws IOException 如果底层资源可以表示成URL,该方法返回对应的URL对象;
File getFile() throws IOException 如果底层资源对应的一个文件,该方法返回对应的File对象;
InputStream getInputStream() IOException 返回资源对应的输入流。
Resource 在Spring框架中起着不可或缺的作用,Spring框架使用Resource装载各种资源,这些资源包括配置文件资源、国际化属性文件资源等。Resource 的具体实现类如下图:
ByteArrayResource 二进制数组表示的资源,二进制数组资源可以在内存中通过程序构造。
ClassPathResource 类路径下的资源,资源相当于类路径的方式表示。
FileSystemResource 文件系统资源,资源文件系统路径的方式表示。例如:D:/conf/bean.xml
InputStreamResource 以输入流返回表示的资源。
ServletContextResource 为访问web上下文中的资源而设计的类,负责以相对于web应用根目录的路径加载资源,它支持以流和URL的方式访问,在war解包情况下,也可以通过File的方式访问,该类还可以直接从jar包中访问资源;
UrlResource Url封装了java.net.URL ,它使用户能够访问任何可以通URL表示的资源,如文件系统的资源、HTTP资源、FTP资源等
Spring 的Resource接口及其实现类可以在脱离Spring框架的情况下使用,它比通过JDK访问资源的API更好用,更强大。
资源加载
资源地址表达式:
地址前缀 | 示例 | 对应资源类型 |
classpath: | classpath:com/baobaotao/beanfactory/bean.xml | 从类路径中加载资源,classpath:和classpath:等价,都是相对与类的跟路径。资源文件可以在标准的文件系统中,也可以在jar或者zip的类包中 |
file: | file:/conf/com/baobaotao/beanfactory/bean.xml | 使用URLResource从文件系统目录中装载资源,可采用绝对或相对路径。 |
http:// | http://www.baobaotao/resource/bean.xml | 使用UrlResource从web服务器中装载资源 |
ftp: | ftp://www.baobaotao.com/resource/bean.xml | 使用UrlResource从FTP服务器中装载资源 |
没有前缀 | com/baobaotao/beanfatory/beans.xml | 根据ApplicationContext具体实现类采用对应的类型的Resource |
?:匹配文件名中的一个字符
* :匹配文件名中任意一个字符
** :匹配多层路径
下面是几个Ant风格的资源路径示例:
classpath:com/t?xt.xml :匹配com路径下com/text.xml ,com/tast.xml或者com/txst.xml;
file:D:/conf/*.xml :匹配文件系统D:/conf目录下所有以xml为后缀的文件;
classpath:com/**/test.xml : 匹配com路径下(当前目录及其子孙目录)的test.xml文件;
classpath:org/springframwork/**/*.xml : 匹配类路径 org/springframwork 下所有的以xml位后缀的文件。
资源加载器:
spring定义了一套资源加载的接口
ResourceLoader 接口仅有一个getResource(String location)的方法,可以根据一个资源地址加载文件资源,不过,资源地址仅支持带资源类型前缀的表达式,不支持Ant风格的资源路径表达式。ResourcePatternResolver 扩展了ResourceLoader 接口,定义了一个新的接口方法:getResources(String
locationPattern),该方法支持带资源类型前缀及Ant风格的资源路径的表达式。
PathMatchingResourceResolver 是Spring提供了标准实现类。
分享一个案例,有一次帮朋友邮件一个1GB多的文件,做了分卷压缩,结果弄了一桌面的压缩文件。一个一个删除不是个很好的办法。不知道怎么的,脑子突然想出了这个方法,结果还是很奏效的。一下子个删除完了。
public class Test001 {
public static void main(String[] args) throws IOException {
ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
Resource[] resources = resolver
.getResources("file:C:/Documents
and Settings/Administrator/桌面/*.rar");
System.out.println(resources.length);
for (Resource resource : resources) {
System.out.println("delete *.rar " + resource.getFile().delete());
System.out.println(resource.getFilename());
}
}
}
相关文章推荐
- Spring源码分析——资源访问利器Resource之接口和抽象类分析
- Spring之资源访问利器Resource
- 攻城狮在路上(贰) Spring(三)--- Spring 资源访问利器Resource接口
- Spring3.0第四讲:资源访问利器-Resource
- 【第四章】 资源 之 4.3 访问Resource ——跟我学spring3
- spring资源访问Resource类
- Spring 资源访问剖析和策略模式应用
- Spring 资源访问剖析和策略模式应用
- 备忘:在web.xml中使用org.springframework.js.resource.ResourceServlet的配置对静态资源的访问
- Spring资源访问
- Spring的资源访问
- Spring 资源访问剖析和策略模式应用
- Spring3 MVC 深入研究--访问静态资源
- Java学习之道:Spring学习笔记 -- 资源访问(Resource接口)
- Java学习之道:[续]Spring学习笔记 -- 资源访问(Resource接口)
- Spring 资源访问剖析和策略模式应用
- Spring 资源访问剖析和策略模式应用
- Spring中的资源访问
- 【第四章】 资源 之 4.3 访问Resource ——跟我学spring3
- Spring 资源访问剖析和策略模式应用