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允许使 ...
随机推荐
- 局域网内部署 Docker Registry
在局域网内部署 Docker Registry 可以极大的提升平时 pull.push 镜像的速度,从而缩短自动化操作的过程.同时也可以缓解带宽不足的问题,真是一举多得.本文将从创建单机的 Docke ...
- Vue.js高仿饿了么WebApp
介绍 学习Vue.js也有一阵子了,为了加深对Vue的理解及运用,做了一个小项目.这是一个高仿饿了么外卖WebApp,现已完成商品预览.商品详情.商家预览.添加购物.查看评论等功能. 部分截图 项目预 ...
- Linux下让一个程序开机自动启动
1.chkconfig但是要在脚本中满足一定的条件(/etc/init.d/)下存在相关服务 2.将启动的程序写入到/etc/rc.local 选择建议: /etc/rc.local可以作为开机启动程 ...
- Java之JSON数据
特别注意:使用JSON前需要导包 操作步骤地址:http://blog.csdn.net/baidu_37107022/article/details/70876993 1.定义 JSON(JavaS ...
- 【JAVAEE学习笔记】hibernate03:多表操作详解、级联、关系维护和练习:添加联系人
一.一对多|多对一 1.关系表达 表中的表达 实体中的表达 orm元数据中表达 一对多 <!-- 集合,一对多关系,在配置文件中配置 --> <!-- name属性:集合属性名 co ...
- js 排序:sort()方法、冒泡排序、二分法排序。
js中的排序,这里介绍三种,sort()方法.冒泡排序.二分法排序. 1.sort方法 写法: 数组.sort(); 返回排好序的数组,如果数组里是数字,则由小到大,如果是字符串,就按照第一个字符的 ...
- Java中SimpleDateFormat用法详解
所有已实现的接口: Serializable, Cloneable SimpleDateFormat 是一个以与语言环境有关的方式来格式化和解析日期的具体类.它允许进行格式化(日期 -> 文本) ...
- Java通过jxl解析Excel文件入库,及日期格式处理方式 (附源代码)
JAVA可以利用jxl简单快速的读取文件的内容,但是由于版本限制,只能读取97-03 xls格式的Excel. 本文是项目中用到的一个实例,先通过上传xls文件(包含日期),再通过jxl进行读取上传 ...
- 动态读取文件持续显示在UI上
private void DisplayLogInfo(FileInfo _LastFile) { if (_LastFile != null) { StreamReader sr = null; t ...
- Linux系统下源码安装rz/sz命令
背景:在windows环境下,使用xshell远程连接公司内部做的一个类似centos的系统,但该linux系统yum install有问题,只能源码安装. root 账号登陆后,依次执行以下命令: ...
|