目标:

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());}}
}

所有的读取的操作过程之中,可以清楚的看到,都是利用字符串来进行资源定位

核心的设计思想就是:利用合理的字符串格式,来进行更加复杂的操作。

转载于:https://www.cnblogs.com/alsf/p/8053969.html

09-spring学习-资源访问接口相关推荐

  1. spring学习笔记--IOC接口

    要引入的jar包 ==其中,日志jar包不在spring官方文件中,要另外下载,链接:spring相关jar包免费下载 例子: public class TestSpring5 {@Testpubli ...

  2. 第四章 Spring.Net 如何管理您的类___统一资源访问接口

    在前面章节有童鞋提到过 关于配置文件 Objects.xml 路径的相关问题,这些东西是 IResource 接口的一些内容,接下来就详细介绍一下 IResource 接口. IResource 接口 ...

  3. Spring学习--实现 FactoryBean 接口在 Spring IOC 容器中配置 Bean

    Spring 中有两种类型的 bean , 一种是普通的 bean , 另一种是工厂 bean , 即 FactroyBean. 工厂 bean 跟普通 bean 不同 , 其返回的对象不是指定类的一 ...

  4. Spring静态资源访问配置

    2019独角兽企业重金招聘Python工程师标准>>> 在SpringMVC3.0之后:<mvc:default-servlet-handler/>以下两种在Spring ...

  5. Spring学习个人记录

    日期:2022/09/15 学习资源:B站狂神说 学习内容:Spring 1.Spring的优点:轻量.开源.简介.免费.Ioc.Aop (1)什么叫做轻量级框架,它与侵入式框架.非侵入式框架的区别和 ...

  6. spring学习-ApplicationContext-spring上下文深入理解

    4月份开始复习一遍spring相关知识.让自己巩固一下spring大法的深奥益处,所以就看了大佬的博客,转载留下来日后继续研读.认为重点的标记为红色 以下文章内容转载自:http://www.cnbl ...

  7. Spring源码分析——资源访问利器Resource之接口和抽象类分析

    从今天开始,一步步走上源码分析的路.刚开始肯定要从简单着手.我们先从Java发展史上最强大的框架--Spring...旗下的资源抽象接口Resource开始吧. 我看了好多分析Spring源码的,每每 ...

  8. Spring Security 实战:使用 JWT 认证访问接口

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 1. 前言 欢迎阅读Spring Security 实战 ...

  9. Spring Boot集成Ueditor富文本编辑器,实现图片上传,视频上传,返回内容功能并且通过OSS转换为链接并且解决Spring Security静态资源访问以及跨域问题

    学习自https://cloud.tencent.com/developer/article/1452451 现在是晚上22点,刚刚和我们的前端交流完了富文本编辑器的一些意见和看法 还是老样子 需求 ...

最新文章

  1. Linux服务器搭建常用环境(一)
  2. 一个基于C++的多线程编程实例(CreateThread函数)
  3. 【数据结构与算法】之深入解析“丑数II”的求解思路与算法示例
  4. 几年会有职业倦怠期_避免倦怠:建立更有活力的组织的4个注意事项
  5. Vue自定义插件方法大全
  6. 分布式ID生成之雪花算法
  7. 20172020图片对比_50张迷人的对比摄影照片作品
  8. 期权策略基准指数简介
  9. 高端android手机,7月Android中高端手机性能榜出炉:华为高端落榜,中端没进前三!...
  10. mysql键值_如何在MySQL中存储键值对?
  11. Redis消息订阅发布
  12. NO pyvenv.cfg file解决办法
  13. seaborn可视化01,涵盖几乎所有用法
  14. 转:System32与SysWOW64的关系
  15. 很实用的应用,推荐一下http://static.apk.hiapk.com/html/2012/06/625213.html?module=256info=MQA2ADMA
  16. 架构设计-支付宝、京东、美团、去哪儿的支付系统架构整体设计详解!!!
  17. vue2 + vuex 高度还原 饿了么 App,用真实数据登陆官网,并实现购物车、下单功能
  18. 建站必备知识:域名注册和域名解析流程有哪些?
  19. Cadence Allegro如何输出贴片坐标文件?
  20. 关于电影主题HTM5网页设计作业成品——千与千寻在线电影(9个页面) HTML+CSS+JavaScript

热门文章

  1. Linux 技术篇-文件大小查看方法实例演示,查看指定文件大小,查看列表下所有文件夹和文件的大小
  2. Python 技术篇 - 文件的读取和写入
  3. freeRtos学习笔(2)任务管理
  4. 电磁场第二章公式总结
  5. 第八周项目实践6 KMP算法(串的模式匹配)
  6. 云计算与分布式的一些关键词
  7. 怎么求人眼图像中的噪声
  8. matchTemplate函数
  9. 图像去噪 使用dct变换进行去噪
  10. kubectl bash补全