1. 获取Jar包的相对路径
关于此话题,网上众说纷纭。经尝试,下面的方法是OK的。
1. xxx.class.getResource("filename")
这里的filename是基于xxx的class文件的相对路径。如果filename写“”,返回.class文件的路径。
2. xxx.class.getResource("/filename")
这里的filename是不依赖于xxx的绝对路径的,也就是以jar包所在目录为相对路径。如果参数写的是“/”,返回null。
无论是1,还是2,调用.getFile()获得的路径名称,(一般里面都有个感叹号,)以参数传入File类似的构造方法都是无效的,比如传送给spring的ClassPathXmlApplicationContext。如果想读取,需要使用getResourceAsStream,绕过File,以流的方式读取。(URI的方式没有尝试)
不要直接调用Classloader的getResource方法,不论是从哪个类里面getClassLoader得到的。
2. ClassPathXmlApplicationContext调用的时候报告找不到文件
如果xml文件成功打到jar包里面,肯定是在classpath中的。解决找不到文件的方法是解压jar包,查看xml文件在jar包中的组织方式,同时构造函数的参数不要以“/”开头,应该使用相对路径。
本文出自 “新青年” 博客,请务必保留此出处http://luckybins.blog.51cto.com/786164/1617431
原文地址:http://luckybins.blog.51cto.com/786164/1617431