spring访问本地资源技术------>Resource接口(及saxreader遇到的异常情况)
来源:互联网 发布:阿里云 挂载数据盘 编辑:程序博客网 时间:2024/05/22 16:02
一,Resource接口,以及它的相关的类,方法
spring强大的访问资源功能来源于-------->Resource接口
Resource接口有四个类(一般该四类是单独执行的不需要实现Resource接口)
1.ClasspathResource:访问src包下(称为类路径)的文件
2.filesystemResource:访问同个包下的文件
3.URLResource:访问网络文件
4.ByteArrayResource:访问字节数组文件
5.inputStreamResource:访问输入流文件
6.ServletContextResource:访问相对于ServletContext路径里的文件
另外它还有六大方法
1.getinputstram():定位打开文件
2.exists():判断文件是否存在
3.ioOpen:判断文件是否正在访问
4.getDescription()返回文件描述信息
5.getfile:返回文件对应的file对象
6.geturl:返回文件对应的url对象
二,以classpathResource和ByteArrayResource作为例子,写出代码
classpathResource读取src类路径下的文件:
package test;
import java.io.IOException;
import java.util.Iterator;
import java.util.List;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;
public class test_resource {
public static void main(String[] args) throws Exception, IOException {
ClassPathResource res=new ClassPathResource("MyXml1.xml");
System.out.println(res.getFilename());
System.out.println(res.getDescription());
//这里就已经结束了一个classpathResource读取src包资源的例子,但是为了给大家展示出整个xml文件信息,
// 我们在这里添加了xml的dom4j解析方法来遍历src包文件里面所有的标签信息
//以下是dom4j--->saxreader遍历解析方法
SAXReader reader=new SAXReader();
Document doc = reader.read(res.getFile());
Element el = doc.getRootElement();
List l = el.elements();
for(Iterator it=l.iterator();it.hasNext();){
Element book = (Element) it.next();
List ll = book.elements();
for(Iterator it2=ll.iterator();it2.hasNext();){
Element eee = (Element) it2.next();
System.out.println(eee.getText());
}
}
}
}
src下的资源文件---->MyXml1.xml
<?xml version="1.0" encoding="utf-8"?>
<计算机书籍列表>
<书>
<书名>bbox教程</书名>
</书>
</计算机书籍列表>
输出结果:
ByteArrayResource输出字节流方式,
package test;
import java.io.IOException;
import java.util.Iterator;
import java.util.List;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import org.springframework.core.io.ByteArrayResource;
public class test_bytearray {
public static void main(String[] args) throws Exception, IOException {
String file="<?xml version='1.0' encoding='gbk'?>"
+"<书><书名><书价格>3.14元</书价格><书作者>林先生</书作者></书名></书>";
byte[] file1 = file.getBytes();
ByteArrayResource bar = new ByteArrayResource(file1);
System.out.println(bar.getDescription());
SAXReader reader=new SAXReader();
Document doc = reader.read(bar.getInputStream());
Element el = doc.getRootElement();
List l = el.elements();
for(Iterator it=l.iterator();it.hasNext();){
Element book = (Element) it.next();
List ll = book.elements();
for(Iterator it2=ll.iterator();it2.hasNext();){
Element eee = (Element) it2.next();
System.out.println(eee.getText());
}
}
}
}
输出结果:
该方法是没有配置文件,因为配置文件由类它自己提供,然后用ByteArrayResource进行输出,也就是说它不是一种读取方式,而是一种输出方式.
以上执行这两种方法的时候,我遇到的一些问题:
1.可以读取xml文件,但是无法使用saxreader来遍历xml标签内容
2.ByteArrayResource输出内容时候遇到-------------->2 字节的 UTF-8 序列的字节 2 无效。 Nested exception: 2 字节的 UTF-8 序列的字节 2 无效的异常
以下便是解答
1.可以读取xml文件,就说明并不是saxreader解析器的问题,也不是resource接口中 classpathResource类的问题,而是xml文件本身书写错误
我一开始书写xml 是这种的
<书>
<书名>bbox教程</书名>
<书>
这种书写是不正确的,xml应该要有三个标签,一个根标签,一个内容标签,一个属性标签(其中属性标签属于内容标签,内容标签属于根标签)如
<书籍列表>
<书>
<书名>bbox教程</书名>
</书>
</书籍列表>
这样就可以解决问题了
2.这种问题是说明申明问题即-----><?xml version="1.0" encoding="utf-8"?>该处申明失败,而异常指向utf-8说明是编码方式出现问题
那么我们就修改编码方式,我使用的IDE是MyEcilpse 它默认下采用gbk编码方式 而此处与utf-8有所冲突
所以在project--->properties----->resource----->text file encoding---->other 改为utf-8就可以了!
- spring访问本地资源技术------>Resource接口(及saxreader遇到的异常情况)
- Resource 接口是 Spring 资源访问的接口,具体的资源访问由该接口的实现类完成
- spring学习笔记(2)文件资源访问接口Resource
- Spring学习(九)资源访问接口Resource
- Spring资源抽象接口--Resource
- Spring资源抽象接口--Resource
- Spring资源抽象接口--Resource
- Spring Resource接口获取资源
- Spring资源抽象接口Resource
- spring资源访问Resource类
- Spring抽象的资源接口Resource的继承体系
- Spring Resource(针对于资源文件的统一接口)
- Spring提供的Resource/ResourceLoader接口操作资源文件
- Java学习之道:Spring学习笔记 -- 资源访问(Resource接口)
- Java学习之道:[续]Spring学习笔记 -- 资源访问(Resource接口)
- 通过Spring Resource接口获取资源
- 通过Spring Resource接口获取资源
- 通过Spring Resource接口获取资源
- 错误: 找不到或无法加载主类
- JAVA面试题连载2017
- WebService
- 对抽象编程:接口和抽象类
- 面试题汇总(其他常见问题篇)
- spring访问本地资源技术------>Resource接口(及saxreader遇到的异常情况)
- js中百度地图API获取本地搜索全部结果自定义显示效果
- Builder设计模式
- Builder设计模式
- 学java的第一节课
- 十大Intellij IDEA快捷键
- 白话空间统计二十三:回归分析(五)
- Server responded" Algorithm negotiation failed"
- cf 768 D. Jon and Orbs(概率DP)@