|
package cn..io;
import java.io.File;
import java.io.IOException;
import java.util.Scanner;
import org.springframework.core.io.DefaultResourceLoader;
import org.springframework.core.io.Resource;
import org.springframework.core.io.ResourceLoader;
public
class Resource4 {
public
static
void main(String[] args) throws IOException {
String filePath= "C:" + File.separator + "Users" + File.separator + "Administrator" + File.separator
+ "Desktop"+File.separator+"pom.xml";
File file=new File(filePath);
ResourceLoader loader=new DefaultResourceLoader();
Resource resource=loader.getResource("file:"+filePath);
if(resource.exists()){
Scanner scan=new Scanner(resource.getInputStream());
scan.useDelimiter(" ");
while(scan.hasNext()){
System.out.println(scan.nextLine());
}
scan.close();
}
}
,读取网络资源:
|
package cn..io;
import
java.io.File;
import java.io.IOException;
import java.util.Scanner;
import org.springframework.core.io.DefaultResourceLoader;
import org.springframework.core.io.Resource;
import org.springframework.core.io.ResourceLoader;
public
class Resource4 {
public
static
void main(String[] args) throws IOException {
ResourceLoader loader=new DefaultResourceLoader();
Resource resource=loader.getResource("http://www.springframework.org/schema/task/spring-task-4.1.xsd");
if(resource.exists()){
Scanner scan=new Scanner(resource.getInputStream());
scan.useDelimiter(" ");
while(scan.hasNext()){
System.out.println(scan.nextLine());
}
scan.close();
}
}
}
|
3,读取classp资源:
|
package cn..io;
import
java.io.File;
import java.io.IOException;
import java.util.Scanner;
import org.springframework.core.io.DefaultResourceLoader;
import org.springframework.core.io.Resource;
import org.springframework.core.io.ResourceLoader;
public
class Resource4 {
public
static
void main(String[] args) throws IOException {
ResourceLoader loader=new DefaultResourceLoader();
Resource resource=loader.getResource("classpath:applicationContext.xml");
if(resource.exists()){
Scanner scan=new Scanner(resource.getInputStream());
scan.useDelimiter(" ");
while(scan.hasNext()){
System.out.println(scan.nextLine());
}
scan.close();
}
}
}
|
这是可以发现我们只需要以字符串的形式配置不同的路径就能对不同的资源进行读取了。
之前都是直接在程序中配置完成的,但是这样做很明显不可能在实际开发中应用,最好的方式是以字符串的方式通过配置文件实现。现在我们就将所有的路径以字符串的形式在applicationContext文件中进行配置实现不同资源的读取。
1,设置一个专门负责资源处理的程序类:
|
package cn..util;
import java.io.IOException;
import java.util.Scanner;
import org.springframework.core.io.Resource;
public
class ResourceUtil {
private Resource src;
public
void setSrc(Resource src) {
this.src = src;
}
public
void print() throws IOException {
if (this.src.exists()) {
Scanner scan = new Scanner(this.src.getInputStream());
scan.useDelimiter("\n");
while (scan.hasNext()) {
System.out.println(scan.nextLine());
}
scan.close();
}
}
}
|
2,在applicationContext.xml文件里对资源进行注入控制:
读取classpath资源:
|
<bean
id="resourceUtil"
class="cn.wnh.util.ResourceUtil">
<property
name="src"
value="classpath:applicationContext.xml"
/>
</bean>
|
读取网络资源:
|
<bean
id="resourceUtil"
class="cn.wnh.util.ResourceUtil">
<property
name="src"
value="http://www.springframework.org/schema/task/spring-task-4.1.xsd"
/>
</bean>
|
编写一个测试类
|
public
class TestMessage {
public
static
void main(String[] args) throws IOException {
ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
ResourceUtil ru=ctx.getBean("resourceUtil",ResourceUtil.class);
ru.print();
}
}
|
可以发现,程序里不再需要ResourceLoader了,这个类之间被Spring隐藏起来了。
4,实现多个资源的注入:
|
public
class ResourceUtil {
private Resource src[];
public
void setSrc(Resource src[]){
this.src=src;
}
public
void print() throws IOException{
for(int
x=0;x<this.src.length;x++){
if(this.src[x].exists()){
Scanner scan=new Scanner(this.src[x].getInputStream());
scan.useDelimiter("\n");
while(scan.hasNext()){
System.out.println(scan.nextLine());
}
scan.close();
}
}
}
}
|
|
<bean
id="resourceUtil"
class="cn.wnh.util.ResourceUtil">
<property
name="src">
<array>
<value>http://www.springframework.org/schema/task/spring-task-4.1.xsd
</value>
<value>classpath:applicationContext.xml</value>
</array>
</property>
</bean>
|
直接执行测试类进行测试,这是可以看到两个文件里的内容都读出来了。
4,Resource通配符:
在Resource处理资源的时候考虑到一些复杂资源的定位问题,所以引入了最初Ant工具中提出的通配符的概念,所以支持有以下三种通配符的使用:
"?":匹配任意一位字符;
"*":匹配任意多个字符;
"**":匹配任意多级目录的字符串内容。
(1)分别观察下面不同的通配符操作:
|
<bean
id="resourceUtil"
class="cn.mldn.util.ResourceUtils">
<property
name="src">
<array>
<value>classpath:x/**/LICENSE*</value>
</array>
</property>
</bean>
|
|
<bean
id="resourceUtil"
class="cn.mldn.util.ResourceUtils">
<property
name="src">
<array>
<value>classpath:**/LICENSE*</value>
</array>
</property>
</bean>
|
在定义资源路径的时候可以不受到目录的限制或细小名称的差别的限制。在开发中,最为常见的就是对"*.properties"文件的读取。
- Spring中ApplicationContext对事件的支持
Spring中ApplicationContext对事件的支持 ApplicationContext具有发布事件的能力.这是因为该接口继承了ApplicationEventPublisher接口. ...
- Spring中的资源文件框架——Resource
摘要 Spring4 以后,官方推荐我们使用Java Config来代替applicationContext.xml,声明将Bean交给容器管理. 在Spring Boot中,Java Config的 ...
- 简说Spring中的资源加载
声明: 本文若有 任何纰漏.错误,请不吝指正!谢谢! 问题描述 遇到一个关于资源加载的问题,因此简单的记录一下,对Spring资源加载也做一个记录. 问题起因是使用了@PropertySource来进 ...
- Spring中的资源加载
大家也都知道JDK的类加载器:BootStrap ClassLoader.ExtenSion ClassLoader.Application ClassLoader:也使用了双亲委派模型,主要是为了防 ...
- ClassPath资源的读取
读取ClassPath的资源 在程序中经常有很多资源需要读取,常见的就是配置文件,Java中将文件当作一种资源来处理,可以使用Class或者ClassLoader来处理 一,使用Class类的getS ...
- Spring中的Resource
Spring中的资源定义:Resource此接口的全名为:org.springframework.core.io.Resource比较常用的资源定义的实现类为:1.ClassPathResource ...
- Spring中资源的加载原来是这么一回事啊!
1. 简介 在JDK中 java.net.URL 适用于加载资源的类,但是 URL 的实现类都是访问网络资源的,并没有可以从类路径或者相对路径获取文件及 ServletContext , 虽然可以通过 ...
- Spring中使用@Value读取porperties文件中的属性值方法总结及注意事项
本文为博主原创,转载请注明出处. 此前曾总结过使用工具类读取properties文件中的属性值,有兴趣的可以看一下. 如何快速获取properties中的配置属性值:https://www.cnblo ...
- 8 -- 深入使用Spring -- 3...4 在ApplicationContext中使用资源
8.3.4 在ApplicationContext中使用资源 不管以怎样的方式创建ApplicationContext实例,都需要为ApplicationContext指定配置文件,Spring允许使 ...
随机推荐
- JAVA栈帧
简介 Java栈是一块线程私有的内存空间.java堆和程序数据相关,java栈就是和线程执行密切相关的,线程的执行的基本行为是函数调用,每次函数调用的数据都是通过java栈来传递的. Java栈与数据 ...
- git常用命令记录
配置本地仓库 git config --global user.name.git config --global user.email 查看配置详情 git config -l 初始仓库 git in ...
- repo版本切换
repo init -u https://android.googlesource.com/platform/manifest repo sync 之后 这样初始化之后,相当于下载了全部的分支, 本想 ...
- Angular Route导航
我们用Angular cli创建带有路由的新项目 ng new router --routing Angular Routes API文档 Angular的文档中有详细的解释: 1)https://a ...
- 为什么各大厂商要抢先跟进H.265?
继爱奇艺.乐视等视频厂商宣布支持 H.265 高清视频后,2014 年 4 月,搜狐视频宣布正式上线视频行业首个 H.265 高清大片专区,可在线观看 200 余部当下最火的超高清大片.国外 BBC ...
- 移动端网页meta设置和响应式
苏宁易购WAP的meta分析 响应式 meta设置 媒体查询时读的width为viewport的宽度.viewport宽度为手机分辨率.比如note2 1280*720.需要重置为设备 640*360 ...
- php笔记一
一.Login登陆验证步骤: 1.赋值,用$_POST将id和password传递给loginProcess.php登陆验证页面. 2.建立数据库连接 $conn=mysql_connect($hos ...
- javaSE_Java第一周总结:有难度题目集合
第一周练习总结 说明:尽量采用多种做法解决 1.使用三种方法实现变量交换 public class Test1Change{ public static void main(String[] args ...
- javacpp-opencv图像处理之1:实时视频添加文字水印并截取视频图像保存成图片,实现文字水印的字体、位置、大小、粗度、翻转、平滑等操作
欢迎大家积极开心的加入讨论群 群号:371249677 (点击这里进群) javaCV图像处理系列: javaCV图像处理之1:实时视频添加文字水印并截取视频图像保存成图片,实现文字水印的字体.位置. ...
- 搭建rtmp直播流服务之4:videojs和ckPlayer开源播放器二次开发(播放rtmp、hls直播流及普通视频)
前面几章讲解了使用 nginx-rtmp搭建直播流媒体服务器; ffmpeg推流到nginx-rtmp服务器; java通过命令行调用ffmpeg实现推流服务; 从数据源获取,到使用ffmpeg推流, ...
|