关于Class.getResource和ClassLoader.getResource的路径问题
来源:互联网 发布:阿里云有在线客服吗 编辑:程序博客网 时间:2024/05/21 06:45
转载:http://www.cnblogs.com/yejg1212/p/3270152.html
Java中取资源时,经常用到Class.getResource和ClassLoader.getResource,这里来看看他们在取资源文件时候的路径问题。
Class.getResource(String path)
path不以’/’开头时,默认是从此类所在的包下取资源;
path 以’/’开头时,则是从ClassPath根下获取;
什么意思呢?看下面这段代码的输出结果就明白了:
package testpackage;public class TestMain { public static void main(String[] args) { System.out.println(TestMain.class.getResource("")); System.out.println(TestMain.class.getResource("/")); }}
输出结果:
file:/E:/workspace/Test/bin/testpackage/file:/E:/workspace/Test/bin/
上面说到的【path以’/’开头时,则是从ClassPath根下获取;】在这里就是相当于bin目录(Eclipse环境下)。
再来一个实例,假设有如下Project结构:
package testpackage;public class TestMain { public static void main(String[] args) { // 当前类(class)所在的包目录 System.out.println(TestMain.class.getResource("")); // class path根目录 System.out.println(TestMain.class.getResource("/")); // TestMain.class在<bin>/testpackage包中 // 2.properties 在<bin>/testpackage包中 System.out.println(TestMain.class.getResource("2.properties")); // TestMain.class在<bin>/testpackage包中 // 3.properties 在<bin>/testpackage.subpackage包中 System.out.println(TestMain.class.getResource("subpackage/3.properties")); // TestMain.class在<bin>/testpackage包中 // 1.properties 在bin目录(class根目录) System.out.println(TestMain.class.getResource("/1.properties")); }}
※Class.getResource和Class.getResourceAsStream在使用时,路径选择上是一样的。
Class.getClassLoader().getResource(String path)
path不能以’/’开头时;
path是从ClassPath根下获取;
还是先看一下下面这段代码的输出:
package testpackage;public class TestMain { public static void main(String[] args) { TestMain t = new TestMain(); System.out.println(t.getClass()); System.out.println(t.getClass().getClassLoader()); System.out.println(t.getClass().getClassLoader().getResource("")); System.out.println(t.getClass().getClassLoader().getResource("/"));//null }}
输出结果:
class testpackage.TestMainsun.misc.Launcher$AppClassLoader@1fb8ee3file:/E:/workspace/Test/bin/null
从结果来看【TestMain.class.getResource(“/”) == t.getClass().getClassLoader().getResource(“”)】
如果有同样的Project结构
使用Class.getClassLoader().getResource(String path)可以这么写:
package testpackage;public class TestMain { public static void main(String[] args) { TestMain t = new TestMain(); System.out.println(t.getClass().getClassLoader().getResource("")); System.out.println(t.getClass().getClassLoader().getResource("1.properties")); System.out.println(t.getClass().getClassLoader().getResource("testpackage/2.properties")); System.out.println(t.getClass().getClassLoader().getResource("testpackage/subpackage/3.properties")); }}
※Class.getClassLoader().getResource和Class.getClassLoader().getResourceAsStream在使用时,路径选择上也是一样的。
如果工程生成jar包,相关的资源你需要修改,则调用TestMain.class.getResource(“/”)方法
maven 导出jar不含资源插件配置:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <version>2.4</version> <configuration> <excludes> <exclude>*.properties</exclude> <exclude>conf/**</exclude> <exclude>*.xml</exclude> <exclude>*.dtd</exclude> <exclude>*.txt</exclude> <exclude>*.json</exclude> </excludes> </configuration> <executions> <execution> <phase>package</phase> <goals> <goal>jar</goal> </goals> </execution> </executions> </plugin>
common-vfs jar 使用注意:
fileMonitor.setRecursive(true);方法要在fileMonitor.addFile(fileObject);之前配置,否则就不支持多级子目录检测
update on 2017-2-15
同一个ClassLoader是不允许多次加载一个类的,否则会报java.lang.LinkageError。attempted duplicate class definition for
name XXX,在下面的例子中会指出。
- 关于Class.getResource和ClassLoader.getResource的路径问题
- 关于Class.getResource和ClassLoader.getResource的路径问题
- 关于Class.getResource和ClassLoader.getResource的路径问题
- 关于Class.getResource和ClassLoader.getResource的路径问题
- 关于Class.getResource和ClassLoader.getResource的路径问题
- 关于Class.getResource和ClassLoader.getResource的路径问题
- 关于Class.getResource和ClassLoader.getResource的路径问题
- 关于Class.getResource和ClassLoader.getResource的路径问题
- 关于Class.getResource和ClassLoader.getResource的路径问题
- 关于Class.getResource和ClassLoader.getResource的路径问题
- 关于Class.getResource和ClassLoader.getResource的路径问题
- 关于Class.getResource和ClassLoader.getResource的路径问题
- 关于Class.getResource和ClassLoader.getResource的路径问题
- 关于Class.getResource和ClassLoader.getResource的路径问题
- 关于Class.getResource和ClassLoader.getResource的路径问题
- 关于Class.getResource和ClassLoader.getResource的路径问题
- 关于Class.getResource和ClassLoader.getResource的路径问题
- 关于Class.getResource和ClassLoader.getResource的路径问题
- Zookeeper 入门
- apache-hive-1.2.1和hbase-1.2.2的整合(伪分布式)
- storm和spring的结合
- Babel 入门教程
- 设计模式之观察者模式
- 关于Class.getResource和ClassLoader.getResource的路径问题
- 第一个Qt应用的实现-总结移植之后的步骤
- poj1579
- 用户登陆界面使用Session保存并导入用户名
- scala 定义Queue 对象时提示没有权限
- 算法训练 递归求二项式系数值
- PHP
- 理一下docker在各平台上的运行机制
- 关于学习安卓的全局总结