09-spring学习-资源访问接口
目标:
1,掌握Resource接口的使用。
2,掌握ResourceLoader接口的使用。
3,掌握各种资源数据的读取操作。
具体内容:
要想进行资源读取操作,首先想到IO包中提供的操作类。
但是,有如下问题:
1,这些类的互相操作,难道太高,很多人对IO领悟并不是很彻底。
2,IO支持的读取有限且复杂。
-读取jar包里面的文件呢?
-读取不同资源文件的时候,操作不统一,例如:读取文件,网络读取;
所以在整个spring设计过程中充分考虑了IO操作中的种种操作问题,提供了新的资源访问处理支持。而整个操作的关键在于:Resource接口。这个接口表示所有的可用资源读取,
而这个接口定义了如下几个常用方法:
1,取得资源的数据长度:public long contentLength()。
2,判断资源是否存在:public boolean exists()
3,取得资源对应的文件信息:public File getFile();
4,取得资源完整网络路径:getUrl()
5,判断资源是否打开:public boolean isOpen()
6,最后一次修改日期:public long lastModifid()
7,创建一个操作的资源:public Resource createRelative()
Resource本身是一个接口,要想使用这个接口,需要使用他的子类:
ByteArrayResource (内存读取),ClassPathResource(ClassPath读取),FileSystemResource(文件读取)
读取不同资源
首先按照基本开发进行基本资源的读取。
1,读取内存资源:ByteArrayResource
构造方法:public ByteArrayResource(byte [] byteArray);
范例:实现内存读取:
package com.Resource.Demo;
import java.util.Scanner; import org.springframework.core.io.ByteArrayResource;
import org.springframework.core.io.Resource; public class ByteResource { public static void main(String[] args) throws Exception {
//此处的内存处理流与之前IO里面的byteArrayInputStream使用形式类似
Resource resource=new ByteArrayResource("helloworld".getBytes());
//就取得更多资源信息来说,比InputStream强
System.out.println("数据长度"+resource.contentLength());
//如果给出的是InputStream,那么可以利用Scannner简化读取。
//getInputStream是通过InputStreamSource父接口继承而来的方法
Scanner scan=new Scanner(resource.getInputStream());
while(scan.hasNext())
{
System.out.println(scan.next());
}
}
}
输出结果:
数据长度10
helloworld
文件读取:FileSystemResource
构造方法:public FileSystemResource(File file);--直接传入File
构造方法:public FileSystemResource(String path);--直接写文件路径
范例:进行文件读取:
package com.Resource.Demo;
import java.io.File;
import java.util.Scanner; import org.springframework.core.io.ByteArrayResource;
import org.springframework.core.io.FileSystemResource;
import org.springframework.core.io.Resource; public class FileResource { public static void main(String[] args) throws Exception {
//此处的内存处理流与之前IO里面的byteArrayInputStream使用形式类似
Resource resource=new FileSystemResource("D:"+File.separator+"test.txt");
//就取得更多资源信息来说,比InputStream强
System.out.println("数据长度:"+resource.contentLength());
//如果给出的是InputStream,那么可以利用Scannner简化读取。
//getInputStream是通过InputStreamSource父接口继承而来的方法
Scanner scan=new Scanner(resource.getInputStream());
//表示/n是换行符,而不是结束符
scan.useDelimiter("\n");
while(scan.hasNext())
{
System.out.println(scan.next());
}
}
}
3,CLASSPATH读取:CLASSPATHRESOURCE
构造方法:public ClassPathResource(String path):
只要保存在了CLASSPATH环境下的路径信息都可以通过此类读取进来。
范例:读取applicationContext.XML文件
如果要进行文件的读取,必须要有完整的路径,也就是说,默认情况下,要想读取指定的资源,那么必须想办法拼凑出路径,
(还需要取得一系列的系统属性,等一系列操作)。
package com.Resource.Demo;
import java.util.Scanner;
import org.springframework.core.io.Resource;
import org.springframework.core.io.ClassPathResource;; public class ClassResource { public static void main(String[] args) throws Exception {
//此处的内存处理流与之前IO里面的byteArrayInputStream使用形式类似
Resource resource=new ClassPathResource("applicationContext.xml");
//就取得更多资源信息来说,比InputStream强
System.out.println("数据长度:"+resource.contentLength());
//如果给出的是InputStream,那么可以利用Scannner简化读取。
//getInputStream是通过InputStreamSource父接口继承而来的方法
Scanner scan=new Scanner(resource.getInputStream());
//表示/n是换行符,而不是结束符
scan.useDelimiter("\n");
while(scan.hasNext())
{
System.out.println(scan.next());
}
}
}
输出结果:

ResourceLoader接口
ResourceLoader接口主要作用是进行ResourceLoader接口对象实例化使用的。这个接口的定义如下:
1,读取指定的资源信息,:public Resource getResource(String location);
2,取得类加载器:public ClassLoader getClassLoader();
ResourceLoader是一个接口,于是要使用这个接口,必须知道它的子类:
DefaultResourceLoader,利用这个子类就可以实现ResourceLoader接口实例化。
但是资源操作的问题并不在于Resource或者ResourceLoader接口,以及其一堆子类,而关键在于这个定位的字符串:
文件读取资源:“file:路径”;
CLASSPATH读取:“classpath:路径”;
网络读取:“http://路径”;
范例:进行文件读取:
package com.Resource.Demo;
import java.io.File;
import java.util.Scanner;
import org.springframework.core.io.DefaultResourceLoader;
import org.springframework.core.io.Resource;
import org.springframework.core.io.ResourceLoader;
public class FileResourceLoader {
public static void main(String[] args) throws Exception { ResourceLoader loader=new DefaultResourceLoader();
Resource resource=loader.getResource("file:D:"+File.separator+"test.txt");
System.out.println("数据长度:"+resource.contentLength());
Scanner scan=new Scanner(resource.getInputStream());
scan.useDelimiter("\n");
while(scan.hasNext())
{
System.out.println(scan.next());
}
}
}
路径只写了一个字符串,就可以读取了。
范例:读取ClassPath路径
package com.Resource.Demo;
import java.io.File;
import java.util.Scanner;
import org.springframework.core.io.DefaultResourceLoader;
import org.springframework.core.io.Resource;
import org.springframework.core.io.ResourceLoader;
public class ClassPathResourceLoader {
public static void main(String[] args) throws Exception { ResourceLoader loader=new DefaultResourceLoader();
Resource resource=loader.getResource("classpath:applicationContext.xml");
System.out.println("数据长度:"+resource.contentLength());
Scanner scan=new Scanner(resource.getInputStream());
scan.useDelimiter("\n");
while(scan.hasNext())
{
System.out.println(scan.next());
}
}
}
范例:读取网络资源
在tomcat这个目录下新建一个note.txt文件。

读取代码:
package com.Resource.Demo;
import java.util.Scanner;
import org.springframework.core.io.DefaultResourceLoader;
import org.springframework.core.io.Resource;
import org.springframework.core.io.ResourceLoader;
public class HttpResourceLoader {
public static void main(String[] args) throws Exception { ResourceLoader loader=new DefaultResourceLoader();
Resource resource=loader.getResource("http://localhost/note.txt");
System.out.println("数据长度:"+resource.contentLength());
Scanner scan=new Scanner(resource.getInputStream());
scan.useDelimiter("\n");
while(scan.hasNext())
{
System.out.println(scan.next());
}
}
}
所有的读取的操作过程之中,可以清楚的看到,都是利用字符串来进行资源定位,
核心的设计思想就是:利用合理的字符串格式,来进行更加复杂的操作。

09-spring学习-资源访问接口的更多相关文章
- spring资源访问接口和资源加载接口
spring 资源访问接口 JDK提供的资源访问类,如java.net.URL.File等,不能很好地满足各种资源的访问需求,比如缺少从类路径或者Web容器的上下文中获取资源的操作类. 鉴于此,spr ...
- 8 -- 深入使用Spring -- 3... 资源访问
8.3 资源访问 Spring 为资源访问提供了一个Resource接口,Spring框架本身大量使用了Resource来访问底层资源. Resource 本身是一个接口,是具体资源访问策略的抽象,也 ...
- 第四章 Spring.Net 如何管理您的类___统一资源访问接口
在前面章节有童鞋提到过 关于配置文件 Objects.xml 路径的相关问题,这些东西是 IResource 接口的一些内容,接下来就详细介绍一下 IResource 接口. IResource 接口 ...
- Spring资源访问接口Resource
该接口拥有对不同资源类型的实现类 boolean exists() 资源是否存在 boolean isOpen() 资源是否打开 URL getURL() 如果底层资源可以表示成URL,则该方法返回对 ...
- Spring读取资源的接口Resource笔记
这个是Resource接口的继承体系图.这个接口就是一个资源描述符,抽象的描述了类路径下或者是文件系统中的文件.比如一个Resource接口的实现类的一个实例就代表一个的资源,比如用一个Resourc ...
- Spring学习总结(8)-接口多个实现类的动态调用
需求描述:当一个接口有2个以上的实现类时,调用方需要根据参数选择只其中一个实现类 Spring版本:5.1.8.RELEASE 1. 接口和实现类 /** * 接口 */ public interfa ...
- Spring学习--实现 FactoryBean 接口在 Spring IOC 容器中配置 Bean
Spring 中有两种类型的 bean , 一种是普通的 bean , 另一种是工厂 bean , 即 FactroyBean. 工厂 bean 跟普通 bean 不同 , 其返回的对象不是指定类的一 ...
- [JavaEE] Spring学习资源链接
学习规划 http://forrest-lv.iteye.com/blog/1166947 SpringMVC - 框架配置 http://blog.csdn.net/ljhabc1982/artic ...
- Spring学习2—Spring容器
一.Spring容器接口关系 容器是Spring框架的核心,Spring容器就是一个巨大的工厂.Spring容器使用Ioc(控制反转(Inversion of Control )管理所有组成应用系统的 ...
随机推荐
- Python开发基础-Day13模块2
sys模块 sys模块提供了一系列有关Python运行环境的变量和函数. #重点记忆 sys.argv #命令行参数List,第一个元素是程序本身路径 sys.exit(n) #退出执行的程序未见,正 ...
- 使用appframework前端框架中输入框圆角问题
目前使用HTML5技术来开发手机跨平台app已经成为了曾经的web开发人员介入移动开发的一条捷径.与此对应也出现了很多新的技术来支撑这样的开发方式,例如国外的phonegap和国内的APPcan等.很 ...
- nyoj 151 Biorhythms
描述 Some people believe that there are three cycles in a person's life that start the day he or she i ...
- luogu P1220 关路灯
题目描述 某一村庄在一条路线上安装了n盏路灯,每盏灯的功率有大有小(即同一段时间内消耗的电量有多有少).老张就住在这条路中间某一路灯旁,他有一项工作就是每天早上天亮时一盏一盏地关掉这些路灯. 为了给村 ...
- POJ 2960 S-Nim 博弈论 sg函数
http://poj.org/problem?id=2960 sg函数几乎是模板题. 调试代码的最大障碍仍然是手残在循环里打错变量名,是时候换个hydra产的机械臂了[超想要.jpg] #includ ...
- Codeforces Round #450 (Div. 2) ABCD
这次还是能看的0 0,没出现一题掉分情况. QAQ前两次掉分还被hack了0 0,两行清泪. A. Find Extra One You have n distinct points on a p ...
- hdu 1402(FFT乘法 || NTT乘法)
A * B Problem Plus Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Other ...
- React事件系统入门
React基于虚拟DOM实现了一个合成事件层,我们所定义的事件处理器会接受到一个合成事件层对象的实例,它完全符合W3C标准,不会存在任何IE标准的兼容性问题.并且和原生的浏览器事件一样拥有同样的接口, ...
- 一劳永逸的搞定 flex 布局
一劳永逸的搞定 flex 布局 寻根溯源话布局 一切都始于这样一个问题:怎样通过 CSS 简单而优雅的实现水平.垂直同时居中.记得刚开始学习 CSS 的时候,看到 float 属性不由得感觉眼前一亮, ...
- Android内存优化5 了解java GC 垃圾回收机制3
引言 接App优化之内存优化(序), 作为App优化系列中内存优化的一个小部分. 由于内存相关知识比较生涩, 内存优化中使用到的相关工具, 也有很多专有名词. 对Java内存管理, GC, Andro ...