java加载资源文件
来源:互联网 发布:网上的淘宝兼职可信吗 编辑:程序博客网 时间:2024/03/29 01:23
获取到应用类加载器之后,就是获取资源文件了,调用loader.getResource(path)可以加载相应路径下的资源文件,不能以‘/’开头,关于包内的资源可以把包当做普通的文件夹,以'/'分隔每个包。
如:URL url2 = ClassLoader.getSystemClassLoader().getResource("demo/names.ser");是获取demo包内的names.ser序列化文件。
二、用需要加载的当前类的getResource方法来加载,其实这个方法也是调用的加载这个类的类加载器来获得资源文件的,只不过是获取的参数不同。
(1)要想获取class所在包内的文件可以用相对路径直接访问包内的资源;如:Demo1.class.getResource("names.ser");获取的是Demo1的class文件所在包内的资源
(2)要想获取包外的资源文件必须以‘/’开头,如URL url = Demo1.class.getResource("/demo/names.ser");获取的是demo包内的names.ser文件
其实第二种方式是对第一种方式的一个封装,都是用的ClassLoader来加载的资源文件。为什么这么说呢?看一下Class类的源码就知道:
1 public java.net.URL getResource(String name) {2 name = resolveName(name);3 ClassLoader cl = getClassLoader0();4 if (cl==null) {5 // A system class.6 return ClassLoader.getSystemResource(name);7 }8 return cl.getResource(name);9 }
1 private String resolveName(String name) { 2 if (name == null) { 3 return name; 4 } 5 if (!name.startsWith("/")) { 6 Class c = this; 7 while (c.isArray()) { 8 c = c.getComponentType(); 9 }10 String baseName = c.getName();11 int index = baseName.lastIndexOf('.');12 if (index != -1) {13 name = baseName.substring(0, index).replace('.', '/')14 +"/"+name;15 }16 } else {17 name = name.substring(1);18 }19 return name;20 }
getResource根据传进来的name值(即相对路径或者绝对路径的形式),我们看到经过resolveName处理之后就调用了ClassLoader c1进行了加载,ClassLoader的加载路径的形式是不以‘/’开头的相对路径,那肯定是resolveName把路径转换了一把,再看看resolveName方法,首先判断是不是以‘/’开头,如果以‘/’开头,则为相对路径,否则就是绝对路径,注意else这个代码块,它将第一个字符去除掉了,确实去除掉之后就符合了ClassLoader的加载路径,而if块中就根据把当前类的包路径截取,然后将.替换成了'/',并添加上那段相对路径,也形成了符合ClassLoader的加载路径。
- java加载资源文件
- java 加载资源文件方式
- java 资源文件加载路径
- Java 加载资源文件整理
- java加载资源文件方式总结
- Java Web项目加载properties资源文件
- 动态加载资源文件
- spring加载资源文件
- spring加载资源文件
- 加载属性资源文件
- 加载国际化资源文件
- ServletContext加载资源文件
- 加载资源文件
- SPRING 加载资源文件
- PropertyPlaceholderConfigurer加载资源文件
- 资源文件加载
- 加载资源文件一
- pyqt 加载资源文件
- linux mysql 插入显示乱码问题
- mysql 常用查询
- redis中各种数据类型对应的jedis操作命令
- android中的Filter接口简介
- Windows codeblocks MinGW配置 [李园7舍_404]
- java加载资源文件
- sun.misc.unsafe类的使用
- Form个性化即时打印
- 一种多线程的处理方法
- 2013 Linux领域年终大盘点
- 解析QT 使用Sqlite存储读取文件
- 理解和配置 Linux 下的 OOM Killer
- C,C++ 指针数组与数组指针
- 在WordPress外部调用WordPress内容