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允许使 ...
随机推荐
- 007---Hibernate基本映射标签和属性介绍
一.映射文件的基本结构举例: <?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-// ...
- 5.Lock接口及其实现ReentrantLock
jdk1.7.0_79 在java.util.concurrent.locks这个包中定义了和synchronized不一样的锁,重入锁——ReentrantLock,读写锁——ReadWriteLo ...
- R语言进行文件夹操作示例(转)
rm(list=ls())path = 'J:/lab/EX29 --在R语言中进行文件(夹)操作'setwd(path)cat("file A\n", file="A& ...
- [HDU1001] Sum Problem
Problem Description Hey, welcome to HDOJ(Hangzhou Dianzi University Online Judge). In this problem, ...
- 使用Eclipse进行Javaweb项目开发时,如何设置外置浏览器Chrome
使用Eclipse开发Javaweb项目时,在Eclipse中显示页面不是很好,那么如何让它自动打开外置浏览器呢?操作如下
- java GUI (课堂笔记)
关于java GUI Swing组件: JFrame 窗口组件 JLabel 标签 JButton 按钮组件 JTextField 单行文本框 系统控件(JDK自带) 自定义控件(模仿系统控件): 继 ...
- python中xrange用法分析
本文实例讲述了python中xrange用法.分享给大家供大家参考.具体如下: 先来看如下示例: >>> x=xrange(0,8) >>> print x xra ...
- python不使用第三方变量,交换两个变量的值
#不使用第三个变量交换两个变量的值 a=1 b=2 a,b=b,a#python的直接交换 #另一种交换方法 a=a+b#a=3 b=2 b=a-b#a=3 b=1 a=a-b#a=2 b=1 pri ...
- APUE-文件和目录(七)符号链接
符号链接 符号链接的用途 符号链接是对一个文件的间接指针,它与前面介绍的硬连接不同,硬连接指向文件的i节点.引入符号链接是为了避开硬连接的一些限制: 硬链接通常要求链接和文件位于同一文件系统中. 只有 ...
- centOS下服务启动
nginx应该在mongodb之后启动,也可以通过chkconfig <服务名> on将服务设置为开机自启动.具体命令如下 service mysql start service memc ...
|